Python程序设计案例教程第2版第11章图形用户界面编程_第1页
Python程序设计案例教程第2版第11章图形用户界面编程_第2页
Python程序设计案例教程第2版第11章图形用户界面编程_第3页
Python程序设计案例教程第2版第11章图形用户界面编程_第4页
Python程序设计案例教程第2版第11章图形用户界面编程_第5页
已阅读5页,还剩39页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SSM框架应用于沈工高职考试系统的设计与实践第11章图形用户界面编程模块11:tkinter库11.12构建简单的GUI1Tkinter简介3设置窗口和组件的属性11.1模块11:tkinter库跨平台支持(Windows、macOS、Linux)Python标准GUI库1

什么是tkinter

2

tkinter的优势

Python标准GUI库跨平台支持(Windows、macOS、Linux)功能丰富,满足基本GUI开发需求简单易学,适合初学者简单易学,适合初学者功能丰富,满足基本GUI开发需求11.1.1构建简单的GUI1

tkinter创建用户界面程序流程

(1)导入tkinter库(2)创建主窗口对象。(3)创建标签、按钮、文本框、列表框等组件对象。(4)打包组件,将组件显示在其父容器中。(5)启动事件循环,GUI窗口启动,等待响应用户操作。11.1.1构建简单的GUI2建立带有标签和按钮的GUI程序例:Case11_1.py举个例子Forexample示例importtkinterwin=tkinter.Tk()

#创建窗口对象#创建标签对象label1=tkinter.Label(win,text="第一个tkinter程序")btn1=tkinter.Button(win,text="确定")#创建按钮对象label1.pack()#采用pack布局方式放置组件btn1.pack()win.mainloop()#启动事件循环11.1.2设置窗口和组件的属性1窗口属性2组件属性title():设置窗口标题geometry():设置窗口大小和位置resizable():设置窗口是否可调整大小使用config()方法设置组件文本、对齐方式、前景色、背景色、字体等属性text:文本内容bg/fg:背景色/前景色font:字体设置width/height:宽度和高度3窗口案例例:Case11_2.py举个例子Forexample示例importtkinterwin=tkinter.Tk()

#创建窗口对象#创建标签对象label1=tkinter.Label(win,text="第一个tkinter程序")btn1=tkinter.Button(win,text="确定")#创建按钮对象label1.pack()#采用pack布局方式放置组件btn1.pack()win.geometry("300x100")#geometry()方法win.title("第一个Label组件")#title()方法win.mainloop()#启动事件循环11.1.2设置窗口和组件的属性4属性案例例:Case11_2.py举个例子Forexample示例importtkinterwin=tkinter.Tk()

#创建窗口对象#创建标签对象label1=tkinter.Label()label1.config(text="第一个tkinter程序")#配置文本属性label1.config(fg="white",bg="blue")#配置前景和背景属性label1.pack()#采用pack布局方式放置组件btn1=tkinter.Button()#创建按钮对象btn1['text']="确定"

#配置文本属性的另一种方法btn1.pack()win.geometry("300x100")#geometry()方法win.title("设置组件的属性")#title()方法win.mainloop()#启动事件循环11.1.2设置窗口和组件的属性tkinter库的布局管理11.22grid布局1pack布局3place布局4使用Frame布局GUI程序需要将组件放入容器中,例如主窗口就是一种容器。放置过程,不仅需要确定组件自身大小,还需要确定组件位置信息,称为布局。布局的方法称为布局管理器。常用的布局管理器:pack()、grid()、place()方法。此外Frame(框架)也是一种容器,需要显示在主窗口中。Frame作为中间层的容器组件,可以分组管理组件。11.2tkinter库的布局管理

11.2.1pack布局参数说明side表示组件在容器中的位置,取值为TOP、BOTTOM、LEFT和RIGHTexpand表示组件可拉伸,取值为YES或NO。当值为YES时,side选项无效,参数fill用于指明组件的拉伸方向fill取值为X、Y或BOTH,填充X或Y方向上的空间,当参数side=TOP或BOTTOM时,填充X方向;当参数side=LEFT或RIGHT时,填充Y方向anchor表示组件在容器中的定位点,取值为N、S、W、E、SW、NE、SE、NW和CENTER等padx和pady组件外部的预留空白宽度ipadx和ipady组件内部的预留空白宽度pack()方法以块的方式布局组件,将组件显示在默认位置,是最简单的布局用法。常用参数如下表所示。1

pack()方法参数说明

11.2.1pack布局2

使用pack()方法的slide参数设置组件的布局

fromtkinterimport*win=Tk()label1=Label(win,text="Top标签",fg="white",bg="blue")label2=Label(win,text="Left标签",fg="white",bg="blue")label3=Label(win,text="Bottom标签",fg="white",bg="blue")label4=Label(win,text="Right标签",fg="white",bg="blue")label1.pack(side=TOP)label2.pack(side=LEFT)label3.pack(side=BOTTOM)label4.pack(side=RIGHT)win.geometry("300x200")win.title("pack()方法")win.mainloop()11.2.1pack布局3

使用pack()方法的anchor参数设置组件的布局

fromtkinterimport*win=Tk()label1=Label(win,text="标签标题",fg="white",bg="blue")label1.pack(anchor=NW,padx=5)label2=Label(win)label2.config(text="标签内容",fg="white",bg="grey")#配置文本属性label2.pack(expand=YES,fill=BOTH,padx=5)btn=Button()btn['text']="确定"#配置文本属性的另一种方法btn.pack()win.geometry("300x200")#geometry()方法win.title("pack()方法")#title()方法3win.mainloop()11.2.2grid布局使用grid()方法的布局被称为网格布局,它按照二维表格的形式,将容器划分为若干行和若干列,组件的位置由行和列所在的位置确定。常用参数如表所示:1

grid()方法参数说明

参数说明row和column组件所在行和列的位置,默认开始值为0rowspan和columnspan组件从所在位置起跨的行数和跨的列数sticky组件所在位置的对齐方式padx和pady组件外部的预留空白宽度ipadx和ipady组件内部的预留空白宽度注意:

在同一容器中,只能使用pack()方法或grid()方法中的一种布局方式。2

使用grid()方法设置组件布局

fromtkinterimport*win=Tk()label1=Label(win,text="请单击相应按钮",fg="black")label1.grid(row=0,column=0,columnspan=4)btn1=Button(text="增加")btn2=Button(text="删除")btn3=Button(text="修改")btn4=Button(text="查询")btn1.grid(row=2,column=0,padx=2)btn2.grid(row=2,column=1,padx=2)btn3.grid(row=2,column=2,padx=2)btn4.grid(row=2,column=3,padx=2)win.geometry("200x150")win.title("grid()布局")win.mainloop()11.2.2grid布局11.2.3place布局使用place()方法的布局可以更精确地控制组件在容器中的位置,但如果容器大小发生了变化,可能会出现布局不适应的情况,所以一般较少使用。常用参数如下表。1

place()方法参数说明

参数说明x和y用绝对坐标指定组件的位置,默认单位为像素height和width指定组件的高度和宽度,默认单位为像素relx和rely按容器高度和宽度的比例来指定组件的位置,取值范围为0.0~1.0relheight和relwidth按容器高度和宽度的比例来指定组件的高度和宽度,取值范围为0.0~1.0anchor表示组件在容器中的定位点,默认为左上角(NW)bordermode组件被指定在计算某位置时,是否包含容器边界宽度。默认为INSIDE,表示计算容器边界,OUTSIDE表示不计算容器边界2

使用place()方法设置组件布局

fromtkinterimport*win=Tk()label1=Label(win,text="place()方法测试",fg="black")label1.place(x=140,y=50,anchor=N)#place()方法布局btn1=Button(text="place()按钮")btn2=Button(text="grid()")btn1.place(x=140,y=80,anchor=N)#place()方法布局btn2.grid(row=2,column=1)#grid()方法布局win.geometry("300x200")win.title("place方法")win.mainloop()11.2.2grid布局11.2.4使用Frame布局框架(Frame)是一个容器组件,通常用于对组件进行分组,从而实现复杂的布局。常用属性如表所示。1

Frame的常用属性

属性说明bd指定边框宽度relief指定边框样式,取值为FLAT(扁平,默认值)、RAISED(凸起)、SUNKEN(凹陷)、RIDGE(脊状)、GROOVE(凹槽)和SOLID(实线)width和height设置宽度或高度,如果忽略,容器通常会根据内容组件的大小调整Frame大小2

使用Frame实现的复杂布局

fromtkinterimport*win=Tk()frm_a=Frame()#框架afrm_b=Frame()#框架bfrm_a.pack()frm_b.pack()lbl_name=Label(frm_a,text="用户名",width=10,fg="black")ety_name=Entry(frm_a,width=20)lbl_name.grid(row=1,column=1)ety_name.grid(row=1,column=2)lbl_pwd=Label(frm_a,text="密码",width=10,fg="black")11.2.2grid布局12ety_pwd=Entry(frm_a,width=20)13lbl_pwd.grid(row=2,column=1)14ety_pwd.grid(row=2,column=2)15#向容器中用grid()方法添加两个按钮16btn_reset=Button(frm_b,text="登录",width=10)17btn_submit=Button(frm_b,text="重置",width=10)18btn_reset.grid(row=1,column=1)19btn_submit.grid(row=1,column=2)20win.geometry("270x120")21win.title("Frame的例子")22win.mainloop()tkinter库的常用组件11.32Button组件1Label组件7Menu组件3Entry组件5CheckButton组件4RadioButton组件6ListBox组件tkinter的常用组件有标签(Label)、按钮(Button)、复选框(Checkbutton)、文本框(Entry)、单选按钮(Radiobutton)、列表框(Listbox)、多行文本框(Text)、滚动条(Scale)、滑块(Slider)、菜单(Menu)、菜单按钮(MenuButton)、对话框(Messagebox)、画布(Canvas)和框架(Frame)等。11.3tkinter库的常用组件11.3.1Label组件属性说明text设置标签显示的文本bg和fg指定组件的背景色和前景色bitmap使用默认图标当作标签内容image设置标签组件要显示的图片width和height指定组件的宽度和高度padx和pady设置组件内文本的左右和上下的预留空白宽度,默认值为1(像素)anchor设置文本在组件内部的位置,取值为N、S、W、E、NW、SW、NE、SEjustify设置文本的对齐方式,取值为LEFT(左对齐)、RGHT(右对齐)或CENTER(居中对齐)font设置字体Label是用于创建标签的组件,主要用于显示不可修改的文本、图片或者图文混排的内容。Label组件的常用属性如表所示1

Label组件属性说明

2Label组件显示图像案例

fromtkinterimport*fromPILimportImage,ImageTkroot=Tk()root.title('Label组件应用')root.geometry('400x300')peom='白日依山尽\n黄河入海流\n欲穷千里目\n更上一层楼'img=Image.open('sun.jpg')photo=ImageTk.PhotoImage(img)l_txt_img=Label(root,text=peom,fg='red',image=photo,font=('微软雅黑',15,'bold'),compound='center',anchor='center')l_txt_img.pack(expand=YES,fill=BOTH)root.mainloop()11.3.1Label组件Button组件用于创建按钮,通常用于响应用户的单击操作,即单击按钮时将执行指定的函数.1

Button组件属性说明

属性说明command指定单击时相应的事件处理程序。其取值为某个函数或方法对象,也可以是一个匿名函数。这个函数或方法不能包括位置参数。state按钮状态,表示是否接受用户单击。默认值NORMAL表示可以单击,DISABLED表示不响应单击,此时按钮表面显示为灰色。11.3.2Button组件2

使用Button组件案例

fromtkinterimport*importtimeroot=Tk()root.title('Button组件应用')texts={'begin':'单击按钮开始计算','computing':'计算中...','end':'计算完成,单击按钮开始重复计算'}defcompute():info['text']=texts['computing']#设置提示文本信息btn['state']=DISABLED#修改按钮状态为不可点击root.update()#即时刷新界面,否则要等到函数返回才刷新。time.sleep(3)#延时3秒以模拟计算过程info['text']=texts['end']#设置提示文本信息btn['state']=NORMAL#恢复按钮为可点击状态info=Label(text=texts['begin'],width=50)info.pack(side=TOP,pady=5)btn=Button(text="开始",command=compute)btn.pack(side=TOP,pady=5)root.mainloop()11.3.2Button组件使用Button组件模拟程序的计算过程,在界面中单击开始按钮,显示“计算中”,3秒后计算完毕,显示“计算完成,单击按钮开始重复计算”。Entry组件即输入组件,用于显示和输入简单的单行文本,Entry组件的部分属性与Label组件相同1

Entry组件属性说明

属性/方法说明state设置组件状态。取值为normal、disabled和readonly。取值为readonly时,组件为只读状态,不接收数据输入validate设置执行

validatecommand校验函数的时间validatecommand设置校验函数textvariable获取组件内容的变量get()返回组件中的全部字符delete(first,last=None)删除从first开始到last之间的字符,如果省略last,则删除first到末尾的全部字符。组件中第一个字符位置为0。删除全部字符可使用delete(0,END)方法11.3.3Entry组件使用Entry组件实现输入数据并计算累加和,执行效果如下图:举个例子Forexample例:Case11_11.py11.3.3Entry组件Radiobutton组件用于创建单选按钮组,选中按钮组中的一项时,其他选项会被取消选中。部分属性和Label组件相同,其他常用属性和方法如表所示1

Radiobutton的常用属性和方法

属性/方法说明command设置改变单选按钮状态时执行的函数indicator设置单选按钮样式。默认值为1,单选按钮为默认样式;值为0时,单选按钮外观为按钮样式value当value值与关联控制变量的值相等时,选项被选中。关联控制变量为IntVar类型时,单选按钮的value值应为整数;关联控制变量为StringVar类型时,单选按钮的value值应为字符串variable单选按钮组的关联控制变量,值可以是IntVar或StringVar类型。如果多个单选按钮关联到一个控制变量时,这些单选按钮属于一个功能组,一次只能选中一项deselect()取消选项的方法select()选中选项的方法11.3.4Radiobutton组件使用Radiobutton组件从4个选项中选择一项,在最下方的Label组件中输出用户的选择,执行效果如下图:举个例子Forexample例:Case11_12.py11.3.4Radiobutton组件11.2.5Checkbutton组件Checkbutton组件用于创建复选框,用来标识是否选定某个选项。用户单击复选框左侧的方框,当方框中出现“√”时,表示该选项被选中。1

Checkbutton常用放法和属性

属性/方法说明command设置改变复选框状态时执行的函数indicator设置复选框样式。默认值为1,复选框为默认样式;值为0时,复选框外观为按钮样式variable复选框的关联控制变量,值为IntVar类型的变量,复选框被选中时,值为1,否则值为0deselect()取消选项的方法select()选中选项的方法使用Checkbutton组件程序创建了4个复选按钮,分别表示4个可选项,并在用户单击“确定”按钮时检查用户的选择情况,单击“提示”按钮时给出正确答案,运行结果如图所示。举个例子Forexample例:Case11_13.py11.2.5Checkbutton组件Listbox组件用于创建列表框,可以显示多个列表项,每项为一个字符串。列表框允许用户一次选择一个或多个列表项,常用参数如表所示:1

Listbox组件常用属性和方法说明

属性/方法说明listvariable关联一个

StringVar类型的控制变量,该变量关联列表框全部选项selectmode设置列表项选择模式,参数可设置为BROWSE(默认值,只能选中一项,可拖动)、SINGLE(只能选中一项,不能拖动)、MULTIPLE(通过鼠标单击可选中多个列表项)、EXTENDED(通过鼠标拖动可选中多个列表项)xscrollcommand关联一个水平滚动条yscrollcommand关联一个垂直滚动条activate(index)选中index对应的列表项cursection()返回包含选中项index的元组,无选中时返回空元组insert(index,relements)在index位置插入一个或多个列表项get(first,last=None)返回包含[first,last]范围内的列表项的文本元组,省略last参数时只返回first对应的项的文本size()返回列表项的个数delete(first,last=None)删除[first,last]范围内的列表项,省略last参数时只删除first的对应项11.2.6Listbox组件使用Listbox组件将“星期一”至“星期日”选项包含在一个多行文本框内,在选择模式中,用户可以单击Radiobutton选择4种不同的模式,单击“检查我的选择”,在最下方的Label组件中输出用户的选择,运行结果如图所示举个例子Forexample例:Case11_14.py11.2.6Listbox组件Menu组件提供了三种类型的菜单,分别是toplevel(顶层菜单)、pull-down(下拉式菜单)、pop-up(弹出式菜单),可创建丰富多彩的菜单。1

Menu组件常用属性和方法说明

方法说明add(type,**options)增加一个菜单项,Type的可选数值包括“command”、“cascade”、“checkbutton”、“radiobutton”和“separator”add_cascade(**options)增加一个层叠(cascade)菜单项add_command(**options)增加一个命令(command)菜单项add_separator(**options)增加一个分割条(separator)config(**options)配置菜单属性,具体见菜单属性说明insert(index,itemType,**options)插入指定类型的菜单项insert_cascade(index,**options)添加子菜单(层叠菜单)delete(first,last=None)删除[first,last]范围内的列表项,省略last参数时只删除first的对应项11.2.7Menu组件创建“文件”和“编辑”菜单,并添加相应的子菜单,单击子菜单调用Messagebox组件出现消息框,运行结果如图所示举个例子Forexample例:Case11_15.py11.2.6Listbox组件tkinter库的事件处理11.42使用组件的bind()方法实现事件处理1使用command参数实现事件处理图形用户界面经常需要对鼠标、键盘等操作做

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论