Python图形界面设计:入门指南

目录

1.图形用户界面概述

1.1tkinter

2.tkinter概述

2.1tkinter模块

2.2图形用户界面的构成

 2.3框架和GUI应用程序类

2.4tkinter主窗口

3几何布局管理器

3.1pack几何布局管理器

3.2grid几何布局管理器

3.3place几何布局管理器

4.事件处理

4.1事件类型

4.2事件绑定

4.3事件处理函数

5.常用组件


1.图形用户界面概述

1.1tkinter

        tkinter是Tk图形用户界面工具包标准的Python接口。tkinter是Python的标准GUI库,支持跨平台的图形用户界面应用程序开发,包括Windows、Linux、UNIX和Macintosh操作系统。
        thinker的特点是简单、实用。thinker是Python语言的标准库之一,Python自带的IDLE就是用它开发的。用thinker开发的图形界面,显示风格是本地化的。
        thinker适用于小型图形界面应用程序的快速开发。

2.tkinter概述

2.1tkinter模块

        tkinter由若干模块组成,例如tkinter、tkinter和tkinter.constants等。
        _tkinter 是二进制扩展模块,提供了对Tk的低级接口,应用级程序员不会直接使用。_tkinter通常是一个共享库(或DLL),但是在一些情况下也可以被Python解释器静态链接。
          tkinter是主要使用的模块,在导入tkinter 时会自动导入tkinter. constants。tkinter.constants模块定义了许多常量。

2.2图形用户界面的构成

(1)通过类Tk的无参构造函数创建应用程序主窗口

from tkinter import *                                                                #导入tkinter模块的所有内容

root = Tk()                                                                               #创建一个Tk根窗口组件root

(2)在应用程序主窗口中添加各种可视化组件,例如文本框()、按钮()等。通过对应组件类的构造函数可以创建其实例并设置其属性。例如:

btnSayHi = Button(root)                               #创建一个按钮组件btnSayHi,作为root的子组件
btnSayHi["text"] = "Hello"                             #设置btnSayHi的text属性

(3)调用组件的pack()/grid()/place()方法,通过几何布局管理器调整其显示位置和大小。例如:

btnSayHi.pack()                                           #调用组件的pack()方法,调整其显示位置和大小

(4)通过绑定事件处理程序响应用户操作引发的事件。例如:

def sayHi(e):                                                                        #定义事件处理程序
        messagebox.showinfo("Message","Hello,world!")    #弹出消息框

btnSayHi.bind("<Button-1>",sayHi)                                     #绑定事件处理程序

root.mainloop()                                                    #调用组件的mainloop()方法,进入事件循环

例:创建一个简单的图形用户界面

from tkinter import *
from tkinter import messagebox
root = Tk()
btnSayHi = Button(root)
btnSayHi["text"] = "hello"
btnSayHi.pack()
def sayHi(e):
    messagebox.showinfo("Message","Hello,world!")
btnSayHi.bind("<Button-1>",sayHi)
root.mainloop()

 2.3框架和GUI应用程序类

        框架(Frame)是tkinter组件之一,表示屏幕上的一块矩形区域。框架一般作为容器使用,在框架中可以包含其他组件,从而实现复杂界面的布局窗体。
        在开放正规和复杂的GUI应用程序时,一般创建一个继承于Frame的类Application,在其构造函数中调用创建其子组件的方法createWidgets()。
        通过创建Application的对象实例可以运行GUI应用程序。

        创建GUI应用程序类:利用框架创建GUI应用程序,在应用程序窗口中分别设计并实现按钮响应功能。


from tkinter import *
from tkinter import messagebox
class Application(Frame):
    def __init__(self,master = None):
        Frame.__init__(self,master)
        self.pack()
        self.createWidgets()
    def createWidgets(self):
        self.btnSayHi = Button(self,text="Hello",command=self.sayHi)
        self.btnSayHi.pack()
        self.btnQuit = Button(self,text="Quit",command=root.destroy)
        self.btnQuit.pack()
    def sayHi(self):
        messagebox.showinfo("Message","Hello,world!")
root = Tk()
app=Application(master=root)
app.mainloop()

2.4tkinter主窗口

1.主窗口属性
        通过类Tk的无参构造函数可以创建应用程序主窗口。通过其对象方法title()可以设置窗口标题;通过字典键可以设置其他属性。通过如下命令可以列举字典键:

例如:
root = Tk()

root.title('示例')                                                  #设置窗口标题

root['width'] = 300; root['height'] = 50                #设置窗口宽度和高度

 2.主窗口大小和位置

        通过geometry()函数可以设置主窗口的大小和位置,例如:

root.geometry('200×50 – 0 + 0')                         #窗口大小为200×50,位于屏幕右上角

        其中,参数的形式为'wxh(+或-)x(+或-)y'。w为宽度;h为高度;+x为主窗口左边离屏幕左边的距离,-x为主窗口右边离屏幕右边的距离;+y为主窗口上边离屏幕上边的距离,-y为主窗口下边离屏幕下边的距离。

3几何布局管理器

        tkinter几何布局管理器用于组织和管理父组件中子配件的布局方式。tkinter提供了3种不同的几何布局管理类,即pack、grid和place。

3.1pack几何布局管理器

        pack几何布局管理器采用块的方式组织组件。pack根据组件创建生成的顺序将子组件添加到父组件中,通过设置选项可以控制子组件的位置等。采用pack的代码量最少,故它在快速生成界面设计中被广泛采用。
        调用子组件的方法pack(),则该子组件在其父组件中采用pack布局。
pack(option = value, … )
pack()方法提供了些选项

选项 意义 取值范围及说明
side 停靠在父组件的哪一边上 'top'、'bottom'、'left'、'right'
anchor 停靠的对齐方式。对应于东、南、西、北、中及四个角

'n'、's'、'w'、'e'、'nw'、'sw'、

'se'、'ne'、'center'

fill 填充空间 'x'、'y'、'both'、'none'
expand 扩展空间 0或1
ipadx,ipady 组件内部在x/y方向上填充的空间大小 单位为c(厘米)、m(毫米)、i(英寸)、p(打印机的点)
padx,pady 组件外部在x/y方向上填充的空间大小 同上

例:pack几何布局示例

from tkinter import *
from tkinter import messagebox
def sayhi():
    messagebox.showinfo("message","登陆成功!")
root = Tk();root.title("登录")
f1=Frame(root);f1.pack()
f2=Frame(root);f2.pack()
f3=Frame(root);f3.pack()
Label(f1,text="用户名").pack(side=LEFT)
Entry(f1).pack(side=LEFT)
Label(f2,text="密码").pack(side=LEFT)
Entry(f2,show="*").pack(side=LEFT)
Button(f3,text="登录",command=sayhi).pack(side=LEFT)
Button(f3,text="取消",command=root.destroy).pack(side=RIGHT)
root.mainloop()

3.2grid几何布局管理器

        grid几何布局管理器采用表格结构组织组件。子组件的位置由行/列确定的单元格决定,子组件可以跨越多行/列。在每一列中,列宽由这一列中最宽的单元格确定。grid适合于表格形式的布局,可以实现复杂的界面,因此被广泛采用。
        调用子组件的方法grid(),则该子组件在其父组件中采用grid布局。
        grid(option = value, …)
        grid()方法提供的选项

选项 意义 取值范围及说明
column 单元格列号 从0开始的正整数
columnspan 列跨度 正整数
row 单元格行号 从0开始的正整数
rowspan 行跨度 正整数
ipndx, ipady 组件内部在x/y方向上填充的空间大小 单位为 c(厘米)、m(毫米)、i(英寸)、p(打印机的点)间大小
pandx, pady 组件外部在x/y方向上填充的空间大小 同上
sticky 组件紧贴所在单元格的某一边角,对应于东、南、西、北、中以及4个角 'n'、's'、'w','e'、'nw'、'sw'、'se'、'ne'、center'。注意:可以紧贴多个边角。例如tk.N + tk.S

例:grid几何布局示例

from tkinter import *
from tkinter import messagebox
def sayhi():
    messagebox.showinfo("message","登陆成功!")
root = Tk();root.title("登录")
Label(root,text="用户名").grid(row=0,column=0)
Entry(root).grid(row=0,column=1,columnspan=2)
Label(root,text="密码").grid(row=1,column=0)
Entry(root,show="*").grid(row=1,column=1,columnspan=2)
Button(root,text="登录",command=sayhi).grid(row=3,column=1,sticky=E)
Button(root,text="取消",command=root.destroy).grid(row=3,column=2,sticky=W)
root.mainloop()

3.3place几何布局管理器

        place几何布局管理器允许指定组件的大小与位置。place的优点是可以精确地控制组件的位置,不足之处是改变窗口大小时子组件不能随之灵活地改变大小。
        调用子组件的方法place(),则该子组件在其父组件中采用place布局。
        place(option, …)
        place()方法提供的选项

选项 意义 取值范围及说明
x, y 绝对坐标 从0开始的正整数
relx, rely 相对坐标 正整数
width, height 宽和高的绝对值
relwidth, relheight 宽和高的相对值
anchor 对齐方式,对应于东、南、西、北、中以及4个角

'n'、's'、'w'、'e'、'nw'、

'sw'、'se'、'ne'、' center'

例:place几何布局示例

from tkinter import *
from tkinter import messagebox
def sayhi():
    messagebox.showinfo("message","登陆成功!")
root = Tk();root.title("登录")
root['width']=200; root['height']=80
Label(root,text="用户名",width=6).place(x=1,y=1)
Entry(root,width=20).place(x=45,y=1)
Label(root,text="密码",width=6).place(x=1,y=20)
Entry(root,width=20,show="*").place(x=45,y=20)
Button(root,text="登录",width=8,command=sayhi).place(x=40,y=40)
Button(root,text="取消",width=8,command=root.destroy).place(x=110,y=40)
root.mainloop()

4.事件处理

4.1事件类型

        用户通过鼠标和键盘与图形用户界面交互时会触发事件。tkinter事件采用放置于尖括号(<>)内的字符串表示,称之为事件系列(Event sequences).其通用格式如下:
        <[modifier – ]…type[ – detail]>
        其中,可选的modifier用于组合键定义,例如同时按下Ctrl键; type表示通用类型,例如键盘按键(KeyPress);可选的detail用于具体信息,例如按键A。
        常用的事件类型如下:
< Control – Shift – AIt – KeyPress – A>              #同时按下Ctrl、Shift、Alt和A几个键
< KeyPress – A>                                               #按下键盘上的A键
< Button – 1 >                                                   #单击鼠标左键
< Double – Button – 1 >                                     #双击鼠标左键
另外,也可以使用短格式表示事件,例如'< 1 >'等同于'< Button – 1 >','x'等同于'< KeyPress – x >'。

4.2事件绑定

1.在创建组件对象实例时指定
在创建组件对象实例时,可以通过其命名参数command指定事件处理函数。
2.实例绑定
        调用组件对象实例方法bind(),可以为指定组件实例绑定事件,方法如下:
        w.bind("< event >", eventhandler, add = ' ')
        其中,< event >为事件; eventhandler 为事件处理函数;可选参数add默认为' ',表示事件处理函数代替其他绑定,如果为' 十 ',则加入事件处理队列。
例如绑定组件对象,使得Cnvns组件实例canvasl可以处理鼠标左键事件,代码如下:
canvas1= Canvas();canvas1.bind("< Button – 1 >",drawline)
3.类绑定
        调用组件对象实例方法bind, cas(),可以为特定组件类绑定事件:
        w. bind_class("Widget", "< event >", eventhandler, add = ' ')
其中,Widget为组件类; <event >为事件; eventhandler为事件处理函数。
        例如绑定组件类,使得所有Canvas组件实例都可以处理鼠标左键事件:
        canvas1 = Canvas(); canvas1.bind_class("Canvas", "< Butten – 1 >", drawline)
4.程序界而绑定
        调用组件对象实例方法 bind_all(),可以为所有组件类绑定事件:
        w.bind_all("< event >", eventhandler, add= ' ')
其中,< event >为事件: eventhandler为事件处理函数。
        例如将PrintScreen键与程序中的所有组件对象绑定,使得整个程序界面都能处理打印屏幕的键盘事件:
        canvas1=Canvas(); canvas1.bind_all("< Key-Print >", printscreen)

4.3事件处理函数

1.定义事件函数和事件方法
        事件处理可以定义为函数,也可以定义为对象的方法,两者都带一个参数event.在触发事件调用事件处理函数时将传递Event对象实例。

def handlerNone(ovent):
        函数体
def handlerNase(self, event):
        方法体

2. Event 事件对象参数属性
通过传递的Event事件对象的属性可以获取各种相关参数

事件处理示例:

from tkinter import *
root=Tk();root.title("事件处理")
def printEvent(event):
    print('当前坐标位置:',event.x,event.y)
root.bind('<Button-1>',printEvent)
root.mainloop()

5.常用组件

1.Label
   
Label(标签)主要用于显示文本信息。Label既可以显示文本,也可以显示图像。
2.LabelFrame
   
LabelFrame(标签框架)是一个带标签的矩形框架,主要用于包含若干组件。
3.Button
   
Button用于执行用户的单击操作。如果焦点位于某个Button,则使用鼠标或空格键单击该按钮时会产生command事件。
4.Message
   
Message(消息)和Label一样,也是用来显示文本信息,但主要用来显示多行文本信息。
5.Entry
   
Entry(单行文本框)主要用于显示和编辑文本。
6.Text
   
Text(多行文本框)主要用于显示和编辑多行文本。
7.Radiobutton
   
Radiobutton(单选按钮)控件用于选择同一组单选按钮中的一个单选按钮。Radiobutton可以显示文本,也可以显示图像。
8.Checkbutton
   
Checkbutton(复选框)控件用于选择一个或多个选项。Checkbutton可显示文本,也可显示图像。
9.Listbox
   
Listbox(列表框)用于显示对象列表,并且允许用户选择一项或多项。
10.OptionMenu
     
OptionMenu(选择项)是允许用户选择一项的列表框(在用户请求时显示)。用户单击下拉按钮可以显示列表框,选择的内容会显示在顶部文本框中。
11.Scale
     
Scale(移动滑块)控件用于在有界区间内通过移动滑块来选择值。
12.Toplevel
     Toplevel(顶层窗口)是直接由窗口管理器管理的窗口,顶层窗口独立于其他窗口,可以创建任意数量的顶层窗口。

物联沃分享整理
物联沃-IOTWORD物联网 » Python图形界面设计:入门指南

发表评论