我的看法
第一次打算学习GUI是在大一的时候,首此接触python在,得知Python可以做GUI图像设计的时候,就打算好好研究一番,因为那是我以为图像设计学好了,就可以深入做图像处理,但是,接触之后,我还是不是很明白GUI设计到底是用来做啥的,知道现在我也不是很清楚。
什么是GUI
GUI全称"Graphical User Interface",中文为图形用户接口。早期人与计算机之间的沟通是文字形式的沟通,例如:早期的DOS的操作系统,windows的提示命令窗口,Linus系统,等等。
python开发工具包tkinter
tkinter作为python进行GUI设计的内建开发,是一个开放原码的图形用户设计接口开发工具,原来是用TCL编写GUI函数库,最初发展是从1991年开始,具有跨平台的特性,可以在Linus,Windows,Mac OS等操作系统上很好的运行。目前这个开发工具包提供了许多图形用户接口,如,标签(Label)、菜单(Menu)、按钮(Button)等。
基本窗口属性
建议一个窗口
from tkinter import *
root = Tk()
root.title("MyWindow")
root.geometry("300x160")
root.configure(bg='yellow')
root.mainloop()
Button:按钮
Canvas:画布
Checkbutton:多选按钮
Entry:文本框
Frame:框架
Label:标签
LabeiFrame:标签框架
Listbox:列表框
Menu:菜单
Mmenubutton:菜单按钮
Message:消息
OptionMenu:下拉式菜单
PanedWindow:面板
Radiobutton:单选按钮
Scale:尺度
Scrollbox:滚动条
Spinbox:可微调输入控件
Toplevel:上层窗口
控件的共同属性
Dimensions:大小
Colors:颜色
Font:字形
Anchor:锚(位置参考点)
Relief styles:属性边框
Bitmaps:显示位图
Cursors:鼠标外形
控件的共同方法
Configuration
1.config(option=value):控件属性可以在建立时设置,也可以在程序执行时使用config()重新设置
2.cget(“option”):取得option参数值
3.keys():可以用在方法获取所有该控件的参数
Event Process
1.mainloop():让程序继续执行,同时进入等待与处理窗口事件
2.quit():Python Shell窗口结束,但是所建立的窗口继续执行
3.update():更新窗口画面
Event callbacks
1.bind(event,callback):事件绑定
2.unbind(event):解除绑定
Alarm handles
after(time,callback):间隔指定时间后调用callback()方法
标签Label的基本应用
Label()方法可以用于在窗口内建立文字或图像标签
属性Color
fg可以设置前景色彩;bg可以用于设置背景色彩
如:
from tkinter import *
root = Tk()
root.title("mytkinter")
label = Label(root,text="I love Python!",fg="red",bg="yellow")
label.pack()#包装与定位组件
root.mainloop()
执行结果:
这里设置前景色彩(即文字)颜色为红色,设置背景颜色为黄色,注意这里的背景颜色仅仅是Label标签的背景颜色
属性Dimensions
height可以设置控件的高度,width可以设置控件的宽度,单位都是字符宽度。
如:
from tkinter import *
root = Tk()
root.title("mytkinter")
label = Label(root,text="I love Python!",fg="red",bg="yellow",width=15,height=5)
label.pack()#包装与定位组件
root.mainloop()
执行结果:
这里设置Label标签的宽度为15个字符宽度,设施高度为5个字符高度
属性Anchor
anchor实际设置的是标签文字在标签区域输出位置的设置,在默认情况下是上下和左右都居中对齐的,其参数有"nw",“n”,“w”,“ne”,“e”,“se”,“s”,"sw"和默认的"center"这些分别代码东西南北方位单词英文首写字母
如:
from tkinter import *
root = Tk()
root.title("mytkinter")
label = Label(root,text="I love Python!",fg="red",bg="yellow",width=15,height=5,anchor="nw")
label.pack()#包装与定位组件
root.mainloop()
执行结果:
这里设置文字内容在标签的西北方(即左上方)
属性Font
font用于设置文字字形。
from tkinter import *
root = Tk()
root.title("mytkinter")
label = Label(root,text="I love Python!",fg="red",bg="yellow",width=15,height=5,anchor="nw",font="Helvetic 18 bold")
label.pack()#包装与定位组件
root.mainloop()
执行结果:
属性Justify
在标签输出中,如果是多行的输出,在最后一行输出时,可以使用justify参数设置所输出的标签内容是left/center/right。默认是居中。
如:
from tkinter import *
root = Tk()
root.title("mytkinter")
label = Label(root,text="I love Python!",fg="red",bg="yellow",width=15,height=5,anchor="nw",font="Helvetic 18 bold",justify="left",wraplength=180)
label.pack()#包装与定位组件
root.mainloop()
执行结果:
其中wraplength用来指示每一行文字最大宽度
属性Bitmaps
为标签位置提供内建位图功能
如:
from tkinter import *
root = Tk()
root.title("mytkinter")
label = Label(root,bitmap="hourglass",bg="yellow",fg="red",compound="center")
label.pack()#包装与定位组件
print(type(label))#传回Label参数类型
root.mainloop()
执行结果·:
参数cpmpound
图片与文字共存时,可以使用此参数来定义文字与图像的位置关系。
from tkinter import *
root = Tk()
root.title("mytkinter")
label = Label(root,bitmap="hourglass",bg="yellow",fg="red",text="I love Python!",compound="center")
label.pack()#包装与定位组件
print(type(label))#传回Label参数类型
root.mainloop()
执行结果:
这里设置文字覆盖在图像上方
属性Relief
用来设置控件的边框
属性padx/pady
设置标签文字与标签区间的间距
如:
from tkinter import *
root = Tk()
root.title("mytkinter")
label = Label(root,text="I love Python!",fg="red",bg="yellow",width=15,height=5,padx=5,pady=10,anchor="nw",font="Helvetic 18 bold",justify="left",wraplength=180)
label.pack()#包装与定位组件
root.mainloop()
执行结果:
属性Cursor
该属性用来设置当鼠标滑过某一指定区域的时候,鼠标箭头显示的样式。
如:
执行结果:
from tkinter import *
from tkinter.ttk import Separator
root = Tk()
root.title("ch2_7")
my_title = "微光女神"
my_para = "微光女神有很多歌曲,只要是所有用尽情感去表达自己的歌曲,都会带人走进他们内心世界,感悟自己的故事"
label1 = Label(root,text=my_title,font="Helvetic 40 bold",bg="yellow",fg="blue",cursor="heart")
label1.pack(padx=20,pady=20)
sep = Separator(root,orient=HORIZONTAL)
sep.pack(fill=X,pady=10)
label2 = Label(root,text=my_para,font="Helvetic 10 normal",bg="lightyellow",fg="lightblue")
label2.pack(padx=20,pady=20)
root.mainloop()
注:自己鼠标滑过上方文字的时候鼠标样式为爱心,由于电脑截图原因,未显示该图标。
属性Separator
在GUI设置中适当使用分割线来分隔可以使界面效果更佳友好,如参数为:HORIZONTAL,则表示建立水平分隔线,参数为:VERTICAL则建立垂直分隔线。
案列如上一个。
————下一章GUI窗口控件配置————