《Python程序设计》课件第7章 tkinter GUI编程_第1页
《Python程序设计》课件第7章 tkinter GUI编程_第2页
《Python程序设计》课件第7章 tkinter GUI编程_第3页
《Python程序设计》课件第7章 tkinter GUI编程_第4页
《Python程序设计》课件第7章 tkinter GUI编程_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

Python程序设计第7章tkinterGUI编程【教学目标】

学习内容tkinter编程基础tkinter控件对话框技能目标能使用tkinter创建GUI窗口程序能使用tkinter的常用控件编写GUI程序会运用控件几何位置的设置方法控制组件位置能使用对话框实现交互界面的功能能为组件添加事件处理函数并实现程序运行任务一理财有风险,投资需谨慎

随着人们理财意识不断提高,一些大学生也有各种各样的理财途径,比如:银行存款、基金、投资股票、银行理财、国债等等,理财有风险,投资需谨慎。本次的任务是使用Python编写GUI存款利息计算器,实现输入本金、年利率和存储年数后,计算利息并输出。【提示】

对于文本用户界面来说,一个程序需要有输入、处理及输出。在一般程序中,通常使用input()函数、print()函数来进行数据或文件的读入和写出,而在GUI界面中,常通过标签控件与输入控件来完成输入输出。在处理部分,文本用户界面与图形用户界面基本相同,只是图形用户界面通常需要按钮控件等来触发。下面利用文本用户界面的程序,计算存款利息,并输出结果。7.1tkinter编程基础

tkinter是Python默认的图形用户界面(GraphicalUserInterface,GUI)库,tkinter是Tkinterface的缩写。7.1.1Tkinter库基础1.Tcl、Tk和Tkinter

tkinter库是Tck/Tk的Python接口2.使用Tkinter库

importtkinter或者fromtkinterimport*3.tkinter程序基本结构

importtkinter #导入tkinter模块win=tkinter.Tk() #创建主窗口label=tkinter.Label(root,text="你好Tkinter")

#创建标签控件label.pack() #打包标签控件win.mainloop() #开始事件循环4.文件扩展名

GUI程序文件扩展名可以是.py或.pyw7.1tkinter编程基础7.1.2Tkinter窗口

tkinter.Tk()方法创建一个主窗口,也称根窗口,主窗口只有一个,它是一个容器,用于包含标签、按钮、列表框等控件或其他容器,构成应用程序的主界面。1.使用默认主窗口

fromtkinterimport* #导入tkinter模块label=Label(text="你好Tkinter") #创建标签,此时会创建并显示主窗口label.pack() #打包标签,此时在主窗口中显示标签mainloop() #开始事件循环2.窗口主要方法

fromtkinterimport* win=Tk()win.title('窗口1')win.geometry('400×300')7.1tkinter编程基础7.1.3窗口布局窗口布局指控件在窗口中的排列方式,Tk提供3种布局:Packer、Placer和Grid。

1.Packer布局Packer布局是Tk的一种几何管理器,它通过相对位置控制控件在容器中的位置。因为控件的位置是相对的,因此当容器大小发生变化时,控件会自动调整位置。在调用pack()方法打包控件时,控件所在的容器使用Packer布局。pack()方法常用的参数。7.1tkinter编程基础7.1.3窗口布局Packer布局示例如下:importtkinterroot=tkinter.Tk()label1=tkinter.Label(root,text="标签1",bg="green",fg="white")label2=tkinter.Label(root,text="标签2",bg="green",fg="white")label3=tkinter.Label(root,text="标签3",bg="black",fg="white")label4=tkinter.Label(root,text="标签4",bg="blue",fg="white")label5=tkinter.Label(root,text="标签5",bg="red",fg="white")label1.pack(side=tkinter.LEFT,fill=tkinter.Y)label2.pack(side=tkinter.RIGHT,fill=tkinter.Y)label3.pack(side=tkinter.TOP,expand=tkinter.YES,fill=tkinter.Y)label4.pack(expand=tkinter.YES,fill=tkinter.BOTH)label5.pack(anchor=tkinter.E)root.mainloop()7.1tkinter编程基础7.1.3窗口布局

2.Grid布局Grid布局又称为网格布局,它按照二维表格的形式,将容器划分为若干行和若干列,行列所在位置为一个单元格,类似于Excel表格。采用grid()方法打包控件时,控件所在的容器使用Grid布局。7.1tkinter编程基础7.1.3窗口布局Grid布局示例如下:importtkinterroot=tkinter.Tk()labell=tkinter.Label(root,text="标签1",fg='white',bg='black')label2=tkinter.Label(root,text="标签2",fg='red',bg='yellow')label3=tkinter.Label(root,text="标签3",fg='white',bg='green')labell.grid(row=0,column=3) #标签1放在0行3列label2.grid(row=1,column=2) #标签2放在1行2列label3.grid(row=1,column=1) #标签3放在1行1列root.mainloop()7.1tkinter编程基础7.1.3窗口布局

3.Place布局Place布局可以比Grid和Packer布局更精确地控制控件在容器中的位置。在调用控件的place()方法时,控件所在的容器使用Place布局。Place布局可以与Grid或Packer布局同时使用。7.1tkinter编程基础7.1.3窗口布局Place布局示例如下:importtkinterlabel1=tkinter.Label(text="标签1",fg="white",bg="black")label2=tkinter.Label(text="标签2",fg="red",bg="yellow")label3=tkinter.Label(text="标签3",fg="white",bg="green")label1.place(x=0,y=0)label2.place(x=50,y=50)label3.place(relx=0.5,rely=0.2)tkinter.mainloop()7.1tkinter编程基础7.1.4框架使用框架(Frame)是一个容器,通常用于对组件进行分组。框架常用选项如下。bd:指定边框宽度。relief:指边框样式,可用RAISED(凸起)、SUNKEN(凹陷)、FLAT(扁平,默认值)、RIDGE(脊状)、GROOVE(凹槽)和SOLID(实线)。width、height:设置宽度和高度,通常被忽略。容器通常根据内容组件的大小自动调整自身大小。7.1tkinter编程基础7.1.3窗口布局框架使用示例如下:importtkinterroot=tkinter.Tk()frame1=tkinter.Frame(bd=2,relief=tkinter.SUNKEN)frame2=tkinter.Frame(bd=2,relief=tkinter.SUNKEN)labell=tkinter.Label(frame1,text='标签1',fg='white',bg='black')label2=tkinter.Label(frame1,text='标签2',fg='red',bg='yellow')label3=tkinter.Label(frame1,text='标签3',fg='white',bg='green')label4=tkinter.Label(frame2,text='标签4',fg='white',bg='black')label5=tkinter.Label(frame2,text='标签5',fg='red',bg='yellow')label6=tkinter.Label(frame2,text='标签6',fg='white',bg='green')frame1.pack()

#框架1和框架2在默认主窗口中使用Packer布局frame2.pack()labell.pack()#标签1、2、3在框架1中使用Packer布局label2.pack(side=tkinter.LEFT)label3.pack(side=tkinter.RIGHT)label4.grid(row=1,column=1)#标签4、5、6在框架2中使用Grid布局label5.grid(row=3,column=4)label6.grid(row=2,column=2)root.mainloop()7.1tkinter编程基础7.1.5事件处理

事件通常指用户在窗口中的动作,如单击鼠标、按下键盘某个键等。

可用command参数为控件指定鼠标单击时执行的函数,在发生事件时执行的函数称为事件处理函数,或者叫回调函数。部分控件,如单选按钮、复选框、标尺、滚动条等,都支持command参数。7.1tkinter编程基础7.1.3窗口布局事件处理示例如下:。importtkinterlabel1=tkinter.Label(text="事件处理")label1.pack()defshowmsg1():label1.config(text="单击了按钮1")defshowmsg2():label1.config(text="单击了按钮2")bt1=tkinter.Button(text="按钮1",command=showmsg1)bt2=tkinter.Button(text="按钮2",command=showmsg2)bt1.pack()bt2.pack()tkinter.mainloop()7.1tkinter编程基础7.1.5事件处理

command参数绑定的事件处理函数不能获得事件对象。要获得事件对象,需要使用bind()方法为控件绑定事件处理函数,bind()方法接收事件名称和事件处理函数名称作为参数,其基本格式如下。

控件.bind(事件名称,函数名称)7.1tkinter编程基础7.1.3窗口布局bind()方法使用示例如下:importtkinterlabel1=tkinter.Label(text="事件处理")label1.pack()defshowmsg(event):obj=event.widgetmsg="事件名称:%s\n控件:%s\n鼠标位置:%s,%s"\%(event.type,event.widget['text'],event.x,event.y)label1.config(text=msg)bt1=tkinter.Button(text="按钮1")bt2=tkinter.Button(text="按钮2")bt1.bind('<Button-1>',showmsg)bt2.bind('<Button-3>',showmsg)bt1.pack()bt2.pack()tkinter.mainloop()7.2tkinter控件7.2.1tkinter控件简介

7.2tkinter控件7.2.1tkinter控件简介

tkinter提供了一组通用的属性来控制控件的外观和行为,可在创建控件时通过参数设置属性,也可以调用控件的config()方法来设置属性。1.尺寸设置

在设置控件与尺寸相关的属性(如边框宽度bd、容器的宽度width或高度height等)且直接使用整数时,其默认单位为像素。例如。label1.config(bd=2) #设置边框宽度力2个像素label2.config(bd='0.2c')#没置边框宽度为0.2厘米2.颜色设置

颜色属性(如背景色、前景色等)可设置为颜色字符串,字符串中可使用标准颜色名称或以符号“#”开头的RGB颜色值。例如。label1.config(bg="000fff")label2.config(bg='blue')7.2tkinter控件7.2.1tkinter控件简介3.字体设置

控件的font属性用于设置字体名称、字体大小和字体特征。font属性通常为一个三元组,其基本格式为“(family,size,special)”,其中,family为字体名称,size为字体大小,special为字体特征。例如。label1.config(font=("仿宋",20,"bolditalicunderlineoverstrike"))4.显示图片

在Windows系统中,可调用tkinter.PhotoImage类来引用文件中的图片,然后通过控件的image属性使用图片,例如。importtkintertkinter.Tk() #必值先创建主窗体,然后才能调用PhotoImage()函数输出图片pic=tkinter.PhotoImage(file='D:\python\ch07\birdnest.png')tkinter.Label(image=pic).pack() #在控件中显示图片7.2tkinter控件7.2.1tkinter控件简介5.使用绑定变量绑定变量比较特殊,它与控件的特定属性关联在一起,两者始终保持相同。修改绑定变量的值,其关联的控件属性也立即变化;修改关联的控件属性的值,其绑定的变量的值也立即变化。tkinter模块提供了4种绑定变量:BooleanVar(布尔型)、StringVar(字符串)、IntVar(整数)和DoubleVar(双精度)。绑定变量的创建方法如下。var=BooleanVar() #布尔型控制变量,默认值为0var=StringVar() #字符串控制变量,默认值为空字符串var=IntVar() #整数控制变量,默认值为0var=DoubleVar() #双精度控制变量,默认值为0.0为控件绑定变量后,可调用变量的set()方法设置变量的值,变量值同步反映到控件。调用get()方法可通过绑定变量返回控件的值。7.2tkinter控件7.2.1tkinter控件简介绑定变量使用示例如下:importtkintertkinter.Tk()bvar=tkinter.BooleanVar()slabel=tkinter.StringVar()slabel.set("这是一个标签")tkinter.Label(text='标签',textvariable=slabel).pack()tkinter.Checkbutton(text='复选框',variable=bvar).pack()defbt1click():bvar.set(True)slabel.set('复选框被选中,其值为:%s'%bvar.get())defbt2click():bvar.set(False)slabel.set('复选框被取消,其值为:%s'%bvar.get())bt1=tkinter.Button(text='选中复选框',command=bt1click)bt2=tkinter.Button(text='取消复选框',command=bt2click)bt1.pack()bt2.pack()tkinter.mainloop()7.2tkinter控件7.2.2画布控件Canvas(1)create_arc(coord,start,extent,fill):创建一个弧形。参数coord定义画弧形区块的左上角与右下角坐标;参数start定义画弧形区块的起始角度(逆时针方向);参数extent定义画弧形区块的结束角度(逆时针方向):参数fill定义填满弧形区块的颜色。实例一绘制一个弧形,在窗口区域的(10,50)与(240,210)坐标间画一个弧形,起始角度是0度,结束角度是270度,使用红色来填满弧形区块。fromtkinterimport*win=Tk()coord=10,50,240,210canvas=Canvas(win)canvas.create_arc(coord,start=0,extent=270,fill="red")canvas.pack()win.mainloop()实例二绘制一个位图,在窗口区域的(40,40)坐标处,画上一个warning位图。fromtkinterimport*win=Tk()coord=10,50,240,210canvas=Canvas(win)canvas.create_bitmap(40,40,bitmap="warning")canvas.pack()win.mainloop()(2)create_bitmap(x,y,bitmap):创建一个位图。参数x与y定义位图的左上角坐标,参数bitmap定义位图的来源,可为grayl2、gray25、gray50、gray75、hourglass、error、questhead、info、warning与question。也可以直接使用XBM(XBitmap)文件,在XBM文件名称之前加上一个@符号,例如bitmap=@hello.xbm。实例三创建一个图片,在窗口区域的(40,140)坐标处,加载一个相同目录内的图片文件。fromtkinterimport*win=Tk()img=PhotoImage(file="xin1.gif")canvas=Canvas(win)canvas.create_image(40,140,image=img)canvas.pack()win.mainloop()(3)create_image(x,y,image):创建一个图片。参数x与y定义图片的左上角坐标;参数image定义图片的来源,必须是tkinter模块的BitmapImage或者PhotoImage类的实例变量。实例四绘制一个线条,从窗口区域的(10,10)坐标处,画一条线到(40,120)坐标处,再从(40,120)坐标处,画一条线到(230,270)坐标处,线条的宽度是3个像素,线条的颜色是绿色。fromtkinterimport*win=Tk()canvas=Canvas(win)canvas.create_line(10,10,40,120,230,270,width=3,fill="green")canvas.pack()win.mainloop()(4)create_line(x0,yo,x1,y1,...,xn,yn,options):创建一个线条。参数x0,y0,x1,y1,...,xn,yn定义线条的坐标;参数options可以是width或者fill。width定义线条的宽度,默认值是1个像素。fill定义线条的颜色,默认值是black。实例五绘制一个圆,在窗口区域的(10,10)到(240,240)坐标处,画一个圆形,圆形的填满颜色是绿色,外围颜色是蓝色。fromtkinterimport*win=Tk()canvas=Canvas(win)canvas.create_oval(10,10,240,240,fill="green",outline="blue")canvas.pack()win.mainloop()(5)create_oval(x0,y0,x1,y1,options):创建一个圆形或者椭圆形。参数x0与y0定义绘图区域的左上角坐标;参数x1与y1定义绘图区域的右下角坐标;参数options可以是fill或者outline。fill定义填满圆形或者椭圆形的颜色,默认值是empty(透明)。outline定义圆形或者椭圆形的外围颜色。实例六绘制一个三角形,在窗口区域的(10,10)、(320,80)、(210,230)坐标处,画一个三角形,多边形的填满颜色是绿色,多边形的外围颜色是蓝色,多边形的曲线平滑度是1。fromtkinterimport*win=Tk()canvas=Canvas(win)canvas.create_polygon(10,10,320,80,210,230,outline="blue",splinesteps=1,fill="green")canvas.pack()win.mainloop()(6)create_polygon(x0,y0,x1,y1,...,xn,yn,options):创建一个至少3个点的多边形。参数x0,y0,x1,y1,..,xn,yn定义多边形的坐标;参数options可以是fill、outline或者splinesteps。fill定义填满多边形的颜色,默认值是black。outline定义多边形的外围颜色,默认值是black。splinesteps是一个整数,定义曲线的平滑度。实例七绘制一个矩形,在窗口区域的(10,10)到(220,20)坐标处,画一个矩形,矩形的填满颜色是红色,矩形的外围颜色是空字符串,表示不画矩形的外围。fromtkinterimport*win=Tk()canvas=Canvas(win)canvas.create_rectangle(10,10,220,220,fill="red",outline="")canvas.pack()win.mainloop()(7)create_rectangle(x0,y0,x1,y1,options):创建一个矩形。参数x0与y0定义矩形的左上角坐标;参数x1与y1定义矩形的右下角坐标;参数options可以是fill或是outline。fill定义填满矩形的颜色,默认值是empty(透明)。outline定义矩形的外围颜色,默认值是black。实例八创建一个文字字符串,在窗口区域的(40,40)坐标处,画一个文字字符串,文字字符串的颜色是红色,(40,40)坐标是在文字字符串的左边。fromtkinterimport*win=Tk()canvas=Canvas(win)canvas.create_text(40,40,text="秋风起兮白云飞,草木黄落兮雁南归。",fill="red",anchor=W)canvas.pack()win.mainloop()(8)create_text(x0,y0,text,options):创建一个文字字符串。参数x0与y0定义文字字符串的左上角坐标;参数text定义文字字符串的文字;参数options可以是anchor或者fill。anchor定义(x0,y0)在文字字符串内的位置,默认值是CENTER,可以是N、NE、E、SE、S、SW、W、NW或者CENTER。fill定义文字字符串的颜色,默认值是empty(透明)。7.2tkinter控件7.2.3按钮控件ButtonButton控件用来创建按钮,按钮内可以显示文字或者图片。Button控件的方法如下。(1)flash():将前景与背景颜色互换来产生闪烁的效果。(2)invoke():执行command属性所定义的函数。Button的属性如下。(1)activebackground:当按钮在作用中时的背景颜色。(2)activeforeground:当按钮在作用中时的前景颜色。实例九文字上添加底线,在按钮上的第一个文字上添加底线。fromtkinterimport*win=Tk()bt1=Button(win,text="公司主页面",underline=0,command=win.quit)bt1.pack()win.mainloop()7.2tkinter控件7.2.4复选框控件CheckbuttonCheckbutton控件用来创建复选框。Checkbutton控件的属性如下。(1)onvalue,offvalue:设置Checkbutton控件的variable属性所指定的变量所要存储的数值。如果复选框没有被勾选,此变量的值为offvalue。如果复选框被勾选,此变量的值为onvalue。(2)indicatoron:将此属性设置成0,可以将整个控件变成复选框。Checkbutton控件的方法如下。(1)select():选择复选框,并且设置变量的值为onvalue。实例十创建3个复选框,在窗口区域内创建3个复选框,并且将此3个复选框靠左对齐,然后勾选第个复选框。fromtkinterimport*win=Tk()check1=Checkbutton(win,text="苹果")check2=Checkbutton(win,text="香蕉")check3=Checkbutton(win,text="橘子")check1.select()check1.pack(side=LEFT)check2.pack(side=LEFT)check3.pack(side=LEFT)7.2tkinter控件7.2.5输入框控件EntryEntry控件用来在窗体或者窗口内创建一个单行的文本框。Entry控件的属性如下。textvariable:属性为用户输入的文字或者要显示在Entry控件内的文字。Entry控件的方法如下。get():此方法可以读取Entry内的文字。实例十一创建一个简单计算器,在窗口内创建一个窗体,在窗体内创建一个文本框,让用户输入一个表达式。在窗体内创建一个按钮,按下此按钮后即计算文本框内所输入的表达式。在窗体内创建一个文字标签,将表达式的计算结果显示在此文字标签上。fromtkinterimport*win=Tk()frame=Frame(win) #创建窗体#创建一个计算式defcalc():#将用户输入的表达式,计算结果后转换成字符串result="="+str(eval(expression.get()))label.config(text=result) #将计算的结果显示在Labe1控件上label=Label(frame) #创建一个Labelentry=Entry(frame) #创建一个Entryexpression=StringVar() #读取用户输入的表达式entry["textvariable"]=expression#将用户输入的表达式显示在Entry控件上#创建一个Button控件.当用户输入完毕后,单击此按钮即计算表达式的结果button1=Button(frame,text="等于",command=calc)entry.focus() #设置Entry控件为焦点所在frame.pack()entry.pack() #Entry控件位于窗体的上方label.pack(side=LEFT) #Label控件位于窗体的左方button1.pack(side=RIGHT) #Button控件位于窗体的右方frame.mainloop() #开始程序循环7.2tkinter控件7.2.6标签控件LabelLabel控件用来创建一个显示方块,可以在这个显示方块内放置文字或者图片。实例十二创建一个优化计算器,在例7-11中将新增一个按钮,单击此新增按钮后,会清除表达式与文字标签的内容。fromtkinterimport*win=Tk()frame=Frame(win) #创建窗体#创建一个计算式defcalc():#将用户输入的表达式,计算结果后转换成字符串result="="+str(eval(expression.get()))label.config(text=result) #将计算的结果显示在Labe1控件上defclear():expression.set("")label.config(text="")label=Label(frame) #创建一个Labelentry=Entry(frame) #创建一个Entryexpression=StringVar() #读取用户输入的表达式entry["textvariable"]=expression#将用户输入的表达式显示在Entry控件上#创建一个Button控件,当用户输入完毕后,单击此按钮即计算表达式的结果button1=Button(frame,text="等于",command=calc)button2=Button(frame,text="清除",command=clear)entry.focus()#设置Entry控件为焦点所在frame.pack()entry.pack() #Entry控件位于窗体的上方label.pack(side=LEFT) #Label控件位于窗体的左方button1.pack(side=RIGHT) #Button控件位于窗体的右方button2.pack(side=RIGHT) #Button控件位于窗体的右方frame.mainloop() #开始程序循环7.2tkinter控件7.2.7列表框控件ListboxListbox控件用来创建一个列表框。列表框内可以包含许多选项,用户可以只选择一项或者选择多项。实例十三创建一个列表框,并且插入8个选项。fromtkinterimport*win=Tk()frame=Frame(win) #创建窗体#创建列表框选项列表name=["香蕉","苹果","橘子","西瓜","桃子","菠萝","柚子","橙子"]listbox=Listbox(frame) #创建Listbox控件listbox.delete(0,END) #清除Listbox控件的内容#在Listbox控件内插入选项foriinrange(8):listbox.insert(END,name[i])listbox.pack()frame.pack()frame.mainloop() #开始程序循环7.2tkinter控件7.2.8菜单控件MenuMenu控件用来创建3种类型的菜单:pop-up((快捷式菜单)、toplevel(主目录)和pull-down(下拉式菜单)。实例十四创建一个主目录((toplevel))菜单,并且新增5个菜单项。fromtkinterimport*importtkinter.messageboxwin=Tk() #创建主窗口#执行菜单命令,显示一个对话框defdoSomething():tkinter.messagebox.askokcancel("菜单","你正在选择菜单命令")mainmenu=Menu(win) #创建一个主目录(toplevel)#新增菜单项mainmenu.add_command(label="文件",command=doSomething)mainmenu.add_command(label="编辑",command=doSomething)mainmenu.add_command(label="视图",command=doSomething)mainmenu.add_command(label="窗口",command=doSomething)mainmenu.add_command(label="帮助",command=doSomething)win.config(menu=mainmenu) #设置主窗口的菜单win.mainloop() #开始程序循环实例十五

实例十六创建一个快捷式菜单(pop-up)。fromtkinterimport*importtkinter.messageboxwin=Tk() #创建主窗口#执行菜单命令,显示一个对话框defdoSomething():tkinter.messagebox.askokcancel("菜单""你正在选择快捷式菜单命令")#创建一个快捷式菜单(pop-up)popupmenu=Menu(win,tearoff=0)#新增快捷式菜单的项目popupmenu.add_command(label="复制",command=doSomething)popupmenu.add_command(label="粘贴",command=doSomething)popupmenu.add_command(label="剪切",command=doSomething)popupmenu.add_command(label="删除",command=doSomething)#在右击的窗口(x,y)坐标处,显示此快捷式菜单defshowPopUpMenu(event):popupmenu.post(event.x_root,event.y_root)#设置右击后,显示此快捷式菜单win.bind("<Button-3>",showPopUpMenu)win.mainloop()#开始程序循环7.2tkinter控件7.2.9单选框控件RadiobuttonRadiobutton控件用来创建一个单选按钮。为了让一群单选按钮可以执行相同的功能,必须设置这群单选按钮的variable属性为相同值,value属性值则是各单选按钮的数值。实例十七创建单选按钮,创建5个运动项目的单选按钮以及一个文字标签,将用户的选择显示在文字标签上。fromtkinterimport*win=Tk() #创建主窗口sports=["棒球","篮球","足球","网球","排球"]#运动项目列表#将用户的选择,显示在Label控件上defshowSelection():choice="您的选择是:"+sports[var.get()]label.config(text=choice)var=IntVar() #读取用户的选择值,是一个整数#创建单选按钮,靠西边对齐Radiobutton(win,text=sports[0],variable=var,value=0,command=showSelection).pack(anchor=W)Radiobutton(win,text=sports[1],variable=var,value=1,command=showSelection).pack(anchor=W)Radiobutton(win,text=sports[2],variable=var,value=2,command=showSelection).pack(anchor=W)Radiobutton(win,text=sports[3],variable=var,value=3,command=showSelection).pack(anchor=W)Radiobutton(win,text=sports[4],variable=var,value=4,command=showSelection).pack(anchor=W)label=Label(win) #创建文字标签,用来显示用户的选择label.pack()win.mainloop() #开始程序循环实例十八创建命令型单选按钮。fromtkinterimport*win=Tk() #创建主窗口sports=["棒球","篮球","足球","网球","排球"] #运动项目列表#将用户的选择,显示在Label控件上defshowSelection():choice="您的选择是:"+sports[var.get()]label.config(text=choice)var=IntVar() #读取用户的选择值,是一个整数#创建单选按钮radio1=Radiobutton(win,text=sports[0],variable=var,value=0,command=showSelection)radio2=Radiobutton(win,text=sports[1],variable=var,value=1,command=showSelection)radio3=Radiobutton(win,text=sports[2],variable=var,value=2,command=showSelection)radio4=Radiobutton(win,text=sports[3],variable=var,value=3,command=showSelection)radio5=Radiobutton(win,text=sports[4],variable=var,value=4,command=showSelection)#将单选按钮的外型,设置成命令型按钮radio1.config(indicatoron=0)radio2.config(indicatoron=0)radio3.config(indicatoron=0)radio4.config(indicatoron=0)radio5.config(indicatoron=0)#将单选按钮靠左边对齐radio1.pack(anchor=W)radio2.pack(anchor=W)radio3.pack(anchor=W)radio4.pack(anchor=W)radio5.pack(anchor=W)label=Label(win) #创建文字标签,用来显示用户的选择label.pack()win.mainloop() #开始程序循环7.2tkinter控件7.2.10滑块控件ScaleScale控件用来创建一个标尺式的滑动条对象,可以移动标尺上的光标来设置数值。滑块对象也可绑定鼠标左键释放事件<ButtoonRelease-1>,并在执行函数中添加参数event来实现事件响应。实例十九创建一个200像素宽的水平滑块控件,取值范围为1.0~5.0,分辨精度为0.05,刻度间隔为1,用鼠标拖动滑块后释放鼠标可读取滑块值并显示在标签上。fromtkinterimport*defshow(event):s='滑块的取值为'+str(var.get())lb.config(text=s)win=Tk()win.title('滑块实验')win.geometry('320x180')var=DoubleVar()scl=Scale(win,orient=HORIZONTAL,length=200,from_=1.0,to=5.0,label='请拖动滑块',tickinterval=1,resolution=0.05,variable=var)scl.bind('<ButtonRelease-1>',show)scl.pack()lb=Label(win,text='')lb.pack()win.mainloop()7.2tkinter控件7.2.11滚动条控件ScrollbarScrollbar控件用来创建一个水平或者垂直滚动条,可与Listbox、Text、Canvas等控件共同使用来移动显示的范围。Scrollbar控件的方法如下。(1)set(first,last):设置目前的显示范围,其值在0与1之间。(2)get():返回目前的滚动条设置值。实例二十创建滚动条控件。创建一个60个选项的列表框、一个水滚动条以及一个垂直滚动条。当移动水平或者垂直滚动条时,改变列表框的水平或垂直方向可见范围。fromtkinterimport*win=Tk() #创建主窗口#创建一个水平滚动条scrollbar1=Scrollbar(win,orient=HORIZONTAL)#水平滚动条位在窗口底端,当窗口改变大小时会在X方向填满窗口scrollbar1.pack(side=BOTTOM,fill=X)scrollbar2=Scrollbar(win) #创建一个垂直滚动条#垂直滚动条位在窗口右端,当窗口改变大小时会在Y方向填满窗口scrollbar2.pack(side=RIGHT,fill=Y)#创建一个列表框,X方向的滚动条指令是scrollbar1对象的set()方法,#Y方向的滚动条指令是scrollbar2对象的set()方法mylist=Listbox(win,xscrollcommand=scrollbar1.set,yscrollcommand=scrollbar2.set)#在列表框内插入60个选项foriinrange(60):mylist.insert(END,"火树银花合,星桥铁锁开。暗尘随马去,明月逐人来。"+str(i))#列表框位于窗口左端,当窗口改变大小时会在X与Y方向填满窗口mylist.pack(side=LEFT,fill=BOTH)#移动水平滚动条时,改变列表框的X方向可见范围scrollbar1.config(command=mylist.xview)#移动垂直滚动条时,改变列表框的Y方向可见范围scrollbar2.config(command=mylist.yview)win.mainloop() #开始程序循环7.2tkinter控件7.2.12文本框控件TextText控件用来创建一个多行、格式化的文本框。用户可以改变文本框内的字体、文字。实例二十一创建一个Text控件,在Text控件分别插入一段文字,以及一个按钮。fromtkinterimport*win=Tk() #创建主窗口win.title(string="文本控件")text=Text(win) #创建一个Text控件#在Text控件内插入一段文字text.insert(INSERT,"晴明落地犹惆怅,何况飘零泥土中。:\n\n")text.insert(INSERT,"\n\n") #跳下一行#在Text控件内插入一个按钮button=Button(text,text="关闭",command=win.quit)text.window_create(END,window=button)text.pack(fill=BOTH)#在第一行文字的第10个字符到第14个字符处插入标签,标签名称为"print"text.tag_add("print","1.10","1.15")#将插入的按钮,设置其标签名称为"button"text.tag_add("button",button)#改变标签"print"的前景与背景颜色,并且加底线text.tag_config("print",background="yellow",foreground="blue",underline=1)text.tag_config("button",justify="center") #设置标签"button"的居中排列win.mainloop() #开始程序循环7.2tkinter控件7.2.13顶层窗口控件Toplevel默认情况下,一个tkinterGUI程序总是有一个默认的主窗口,也称根窗口或root窗口。root窗口可通过显式调用kinter.Tk()来创建。如果没有显式调用tkinter.Tk(),GUI程序也会隐式调用。顶层窗口组件Toplevel用于创建一个顶层窗口。顶层窗口默认外观和root窗口相同,可独立地进行操作。实例二十二创建了一个root窗口和两个顶层窗口。fromtkinterimport*root=Tk() #显示创建root窗口root.title('默认主窗口') #设置窗口标题win1=Toplevel() #创建顶层窗口win1.title('顶层窗口1') #设置窗口标题win1.withdraw() #隐藏窗口win2=Toplevel(root) #显示设置顶层窗口的父窗口为rootwin2.title('顶层窗口2')win2.withdraw()frame1=LabelFrame(text='顶层窗口1:',relief=GROOVE)frame1.pack()bt1=Button(frame1,text='显示',command=win1.deiconify) #单击按钮时显示窗口bt1.pack(side=LEFT)bt2=Button(frame1,text='隐藏',command=win1.withdraw) #单击按钮时隐藏窗口bt2.pack(side=LEFT)frame2=LabelFrame(text='顶层窗口2:',relief=GROOVE)frame2.pack()bt3=Button(frame2,text='显示',command=win2.deiconify)bt3.pack(side=LEFT)bt4=Button(frame2,text='隐藏',command=win2.withdraw)bt4.pack(side=LEFT)bt5=Button(win1,text='关闭窗口',command=win1.destroy) #单击按钮时关闭窗口bt5.pack(anchor=CENTER)bt6=Button(win2,text='关闭窗口',command=quit)bt6.pack(anchor=CENTER)root.mainloop()7.3对话框

tkinter提供下列不同类型的对话框,这些对话框的功能存放在tkinter的不同子模块中,主要包括messagebox模块、filedialog模块和colorchooser模块。7.3.1消息对话框messagebox模块提供下列方法来打开供用户选择的对话框。(1)showinfo(title,message,options):显示普通信息对话框。(2)showwarning(title,message,options):显示警告信息对话框。(3)showerror(title,message,options):显示错误信息对话框。(4)askquestion(title,message,options):显示询问问题对话框。(5)askokcancel(title,message,options):显示询问确认取消对话框。(6)skyesno(title,message,options):显示询问是否对话框。(7)askyesnocancel(title,message,options):显示询问是否取消对话框。(8)askretrycancel(title,message,options):显示询问重试取消对话框。各个函数的参数均可省略,title参数设置对话框标题,message参数设置对话框内部显示的提示信息,options为一个或多个附加选项。实例二十三调用了各个方法显示相应的消息对话框,并打印返回值。fromtkinterimport*fromtkinter.messageboximport*win=Tk()title="通用消息对话框"print("信息对话框:",showinfo(title,"这是信息对话框"))print("警告对话框:",showwarning(title,"这是警告对话框"))print("错误对话框:",showerror(title,"这是错误提示对话框"))print("问题对话框:",askquestion(title,"这是个问题正确吗?"))print("确认取消对话框",askokcancel(title,"请选择确认或取消"))print("是否对话框:",askyesno(title,"请选择是或否"))print("是否取消对话框:",askyesnocancel(title,"请选择是、否或取消"))print("重试话框:",askretrycancel(title,"请选择重试或取消"))win.mainloop()7.3对话框7.3.2文件对话框tkinter.filedialog()提供了标准的文件对话框,其的常用方法如下。(1)askopenfilename():打开“打开”对话框,选择文件。如果有选中文件,则返回文件名,否则返回空字符串。(2)asksaveasfilename():打开“另存为”对话框,指定文件保存路径和文件名。如果有指定文件名,则返回文件名,否则返回空字符串。(3)askopenfile:打开“打开”对话框,选择文件。如果有选中文件,则返回以“r方式打开的文件,否则返回None。(4)asksaveasfile():打开“另存为”对话框,指定文件保存路径和文件名。若指定了文件名,则返回以“w”方式打开的文件,否则返回None。实例二十四打开系统的标准文件对话框。fromtkinterimport*fromtkinter.filedialogimport*fromtkinter.messageboximport*defbt1click(): #打开文件withopen(askopenfilename()

,encoding='utf-8')as

温馨提示

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

评论

0/150

提交评论