- GUI用户界面一般包含Label、Button、ListBox、Text、Menu和Scrollbar等一些标准的界面组件,实现用户交互和程序输出。常用的GUI有Tkinter、PyQt、wxPython等。
- sudo apt install +包名
- Tk的调用形式:Tk(screenName=None,baseName=None,className=‘Tk’,useTk=1,sync=0,use=None)用于创建一个Tkinter顶层窗口,一般作为Tkinter应用程序的主窗口。Tk从Misc类与Wm类派生,前者是Tkinter中widgets的基础类,后者用于窗口管理。所有参数都是默认参数。
- 设置标题:title(string=None),Tk继承自Wm的一个对象方法,用于设置窗口标题。参数表示标题的字符串,默认值是None。
- 设置窗体大小:geometry(newGeometry=None),参数newGeometry接收一个类似于’widthxheight±x±y’的字符串。其中"width"表示窗体宽度,"height"表示窗体高度,小写字母"x"用于连接width与height。“±x"表示窗体距离屏幕左右边界的像素值,”+“表示窗体左边和屏幕左边的距离;”-"表示窗体右边和屏幕右边的距离。“±y"表示窗体距离屏幕上下边界的像素值,”+“表示窗体上边和屏幕上边的距离;”-"表示窗体下边和屏幕下边的距离。
- 启动事件循环:mainloop(n=0)
- 构建一个标准的GUI应用程序主要分成3个步骤或模块:
a. 构建顶层窗体;
b. 窗体布局,设置大小、标题等属性,添加其他组件等;
c. 启动事件循环,处理各种GUI事件或操作指令。 - Label组件:Label(master=None,cnf={},**kw)用来创建一个Label控件,并将其放置在容器中。Label继承于widget,是一种widget组件。master表示该控件放置的容器的对象,默认值是None;cnf是该控件的选项或属性值设置,是字典类型,默认是空字典;kw是关键字型可变参数,可以对控件的选项或属性值进行设置。cnf与kw参数功能相同,前者通过字典的形式传递参数,后者通过关键字的形式传递参数;目前保留cnf的功能是为了向后兼容。Label可以设置的选项或属性有text(文本内容)、background(背景)、foreground(背景)、font(字体)、width(宽)和height(高)等。调用形式:pack(cnf={},**kw)
- Button组件:又称按钮控件。Button(master=None,cnf={},**kw);pack(cnf={},**kw)
- Checkbutton组件:又称为多选框控件。Checkbutton(master=None,cnf={},**kw);pack(cnf={},**kw);IntVar(master=None,value=None,name=None)
- Radiobutton组件:又称为单选按钮控件。Radiobutton(master=None,cnf={},**kw);pack(cnf={},**kw)
- LabelFrame组件:是在窗体上显示的一个带标题的边界框,可以把相关的一些控件放置到一组中,方便管理。LabelFrame(master=None,cnf={},**kw)
- Entry组件:用于输入和显示一行简单文本。
Entry(master=None,cnf={},**kw)创建一个Entry控件
delete(first,last=None)在Entry中删除从first到last(不包含)的文本
insert(index,string)在Entry中的index位置插入string。
grid(cnf={},**kw)按照Grid布局管理的方法,用于在父容器中放置Entry。 - Listbox组件:是一个列表框组件,用来显示一个字符串构成的列表,用户可以选择列表中的一项或多项。
Listbox(master=None,cnf={},**kw)从XView类与YView类中派生。
delete(first,last=None)在Listbox中删除从first到last(不包括)的字符串项。
insert()在Listbox中的index位置插入elements。 - Scrollbar组件:是一个滚动条控件,当控件内容不超过可视化区域时,可以滚动显示,可以用于Listbox。Text等进行滚动显示。
Scrollbar(master=None,cnf={},**kw)包含一个可以移动的滑动块。
set(*args)设置0~1的分数值表示滚动条上滑动块的位置。
config(cnf=None,**kw)设置Scrollbar的属性。 - Scale组件:是一个范围控件,显示一个数值刻度,为输入限定范围的数字区间。
Scale(master=None,cnf={},**kw)会显示一个数值刻度,以及沿着数值刻度线移动的滑块,滑块的位置表示用户选择的数值。
get(*args)获取滑块当前所在位置的对应数值。 - Text组件:用来显示和输入多行文本。
Text(master=None,cnf={},**kw)从XView、YView类派生,支持内容的滚动显示。
delete(index1,index2=None)在Text中删除从index1到index2(不包含)的文本。
insert(index,chars,*args)在Text中的index位置前插入字符串chars,字符串附件与样式相关的标签由args参数给出。 - Canvas组件:又称发画布组件,能显示图形元素和文本,提供绘图功能,如绘制直线、椭圆、多边形和矩阵。
Canvas(master=None,cnf={},**kw)从XView、YView类派生,支持滚动条。
create_line(*args,**kw)在Canvas中绘制折线,args提供形如x1,y1,…,xn,yn的坐标值;kw提供线宽、线的颜色等属性。
create_rectangle(*args,**kw)在Canvas中绘制矩形,args提供矩形的左上角、右下角坐标x1,y1,x2,y2;kw提供线宽、线的颜色等属性。
create_text(*args,**kw)在Canvas中输出文本,args提供输出文本的位置x1,y1;kw给出文本的相关信息,如文本内容等。 - Menu组件:又称菜单控件,用来在窗体上显示菜单栏、下拉菜单和弹出菜单。
Menu(master=None,cnf={},**kw)
add_cascade(cnf={},**kw)添加分级的菜单项,即添加子菜单。通过cnf或kw,提供label(显示内容)、Menu(菜单对象)等参数。
add_command(cnf={},**kw)添加命令型的菜单项,即添加命令菜单。通过cnf或kw,提供label(显示内容)和command(菜单命令处理函数)等参数。 - Menubutton组件:又称为菜单按钮控件,常用来显示下拉菜单和弹出菜单。
Menubutton(master=None,cnf={},**kw) - OptionMenu组件:从菜单按钮控件类派生的子类,运行后显示一个下拉列表,允许用户选择一个菜单项对应的值。
OptionMenu(master,variable,value,*values,**kwargs) - Message组件:又称为消息控件,用来显示多行文本,一般不可编辑。当宽度不够时会自动换行;也能用“\n”强制换行。
Message(master=None,cnf={},**kw) - Spinbox组件:用来输入,可以限定输入范围,可用于从有限个数的有序值中间选择输入。
Spinbox(master=None,cnf={},**kw)从XView类派生,支持水平方向的内容滚动显示。
insert(index,s)在Spinbox中的index位置插入string。 - PanedWindow组件:是布局管理插件,可以作为容器,放置一个或多个子控件。可以通过拖动分割线来改变子控件的大小。
PanedWindow(master=None,cnf={},**kw) - Toplevel组件:是一个顶层窗口;既可以独立显示,拥有标题、边界等,又是一个独立窗口,可以作为容器,放置其他GUI组件。
Toplevel(master=None,cnf={},**kw)直接从BasicWidget类派生,也继承了类Wm,具有窗口管理功能。
title(string=None)用于设置窗口标题。
geometry(newGeometry=None) - 在Tkinter中,使用bind()方法进行事件绑定。
bind(sequence=None,func=None,add=None)将GUI组件的事件sequence与回调函数func()绑定。GUI组件触发事件sequence时,系统会自动调用func()函数,同时将sequence事件对应的Event对象作为参数传入func()函数中。 - 在Tkinter中,绑定事件时,通常使用字符串来描述事件:
鼠标事件:
:表示鼠标左键按下。、和<1>表达相同的意思。
:按住鼠标左键移动,即拖动;如果省略B1,表示鼠标移动。
:鼠标左键双击。
:鼠标左键弹起。
1表示左键,2表示中键,3表示右键。
键盘事件:
:用户按了键盘上的Enter键。
:用户按了键盘上的任意键。具体的键值会传给回调函数的event参数中的char成员。
窗体事件:
:鼠标指针移动到窗体或控件之上。
:鼠标指针离开窗体或控件。
:窗体或控件发生了改变,如大小、位置等。 - Event对象:
widget:表示产生事件的Tkinter控件。
x,y:表示产生事件时的鼠标位置。
x_root,y_root:表示产生事件时鼠标相对于屏幕左上角的位置。
char:表示产生事件时的字符代码(仅对鼠标事件有效)。
keysym:表示产生事件时键的符号的符号(仅对键盘事件有效)。
num:表示产生事件时的鼠标对应的数字(仅对鼠标事件有效)。
width,height:表示产生事件时的窗体或控件的大小(仅对Configure事件有效)。
type:表示产生事件时的事件类型。 - 在Tkinter中提供了3种方式对控件进行布局管理,分别对应Pack、Grid和Place 3个类,在每个类中分别对应实现了pack()、grid()、place()方法。
pack(cnf={},**kw)
anchor:在容器中放置控件的位置,默认是CENTER,可以设置为N、S、E、W中的一个或两个。
expand:布尔型变量,设置控件是否扩展填充容器中除控件外的额外空间,默认False。
Fill:默认是NONE,设置控件是否充满容器,X表示横向充满,Y表示纵向充满,BOTH表示两个方向。
side:默认是TOP,设置控件在容器中从哪边开始放置,如果要横向布局,可以设置LETH。另外,还可以设置BOTTOM与RIGHT。
grid布局:又称网络布局,一般要提供两个参数,分别是行和列,对应表格的网格单元。
grid(cnf={},**kw)
column:数字,从0开始,表示网格单元在第几列。
columnspan:数字,表明控件跨几列。
row:数字,从0开始,表明控件跨几行。
rowspan:数字,表示控件跨几行。
sticky:在网格大于控件时,如何放置控件,可以取代表方向S、N、E、W中的一个或两个。 - place布局:使用place方式布局,要精确给定每个控件的位置信息,并且在不同的分辨率下,界面会有较大的差异。
place(cnf={},**kw)
anchor:在容器中放置控件的位置,默认是NW,可以设置为CENTER,N、S、E、W中的一个或两个。
x:容器中放置控件的x坐标。
y:容器中放置控件的y坐标。
relx:容器中放置控件的x相对坐标,相对于width,等于1表示在最右边。
rely:容器中放置控件的y相对坐标,相对于height,等于1表示在最下边。
width:容器中放置控件的高度。
relwidth:容器中放置控件的相对于容器的宽度,界于0~1。
relheight:容器中放置控件的相对于容器的高度,界于0~1。 - messagebox消息对话框:
askquestion(title=None,message=None,**options)弹出一个对话框,提示一行信息,显示“yes”“no”两个按钮供用户选择,并返回选择结果。 - filedialog文件对话框:用于文件读写时弹出对话框,供用户浏览目录,选择文件或路径。
asksaveasfilename(**options)会弹出一个文件打开对话框,提供本地存储浏览,供用户浏览目录,选择文件;成功选择文件后,返回文件的路径。 - colorchooser颜色选择对话框:主要打开系统调色板,供用户根据RGB分量直观地选择一种颜色。
askcolor(color=None,**options)弹出一个系统调色板,供用户直观地选择RGB颜色;成功选择后,返回RGB形式的颜色值。
参考书籍:《Python 3.x基础教程》