我们在写代码的时候,为了让程序效果更加直观,我们通常会给它们披上一层漂亮的外衣,这件外衣就是——-----GUI,中文名也叫,图形用户界面,可以起到很好的交互作用。接下来我们重点关注Python自带的GUI模块-----tkinter,看看它有哪些丰富的图形界面。1.安装导入,tkinter库系统自带,不用安装,直接导入即可:importtkinterastk#因为比较长,所以简写一下,用tk表示。2.实例化窗口root=tk.Tk()#主窗口root.title('hello')#窗口标题root.geometry('400x500')#窗口大小root.wm_minsize(140,170)#设置窗口最小大小root.wm_maxsize(1440,2800)#设置窗口最大尺寸root.iconbitmap('1.ico')#窗口图标必须是ico格式的图片root.resizable(width=False,height=True)#设置窗口宽度不可变,高度可变root.mainloop()#主窗口循环显示我们的第一个窗口就是这样产生的,它还有很多其他的功能,比如:root.quit()#Exitroot.destroy()#销毁root.update()#刷新可以接受用户更改程序进程root.update_idletasks()#刷新不能接受用户更改程序进程root.wm_title('iloveyou')#最小化显示文字root.configure(background='blue')#Backgroundcolor让我们给它添加一些其他的组件和功能。3.基础组件tkinter中有很多丰富的组件,包括标签、文本框、列表框、下拉列表框、多选框、单选框等,下面我们一起来了解一下。1.Label是tkinter中的标签组件,主要用于提示。那么它有哪些有趣的功能呢?我们看一下:label=tk.Label(root,text='Hello',#label里面的文字bg='red',#背景颜色font=('Arial',20),#字体和字号width=10,#Textwidthheight=5#Textheight)但是我们不会像这样把label添加到我们的主界面中,还得为它做下一步:label.pack()#在主界面中添加组件看效果:这样我们就添加成功了,就是有点丑,后面再修改。可以看到当前标签中的值是静态的,不能修改。如果我们想让它动态变化,那么我们可以这样做:这样就实现了修改标签值的功能。关于标签有很多优秀的方法,例如:label.configure(text)#重置标签文本设置为文本时生效label.configure(background='blue')#重置标签背景的属性标签一共有以下几种类型:anchor 文本位置;背景(bg) 背景色;foreground(fg) 前景颜色;borderwidth(bd) 边框宽度;宽度 标签宽度;height 标签高度;位图 标签; 字体;图片 标签;justify 多行文本对齐;text 标签文本,可以用'\n'表示换行textvariable 显示文本自动更新,与StringVar等配合使用2.Button按钮的功能主要是实现点击功能,如确认和提交操作。那么它有哪些操作呢?可以看到点击事件已经成功实现,我们可以通过点击按钮来改变标签的值。我们来看一下:可以看到数值和背景色都修改成功了。上图中的side='left'你可能不理解。其实就是确定元器件的位置,一左一右。按钮还有隐藏和显示的功能,实现起来也蛮容易的:button.pack#showbutton.pack_forget#隐藏关于按钮有以下方法供大家学习:anchor textposition;background(bg) 按钮背景色;位图: 按钮上显示的位图;borderwidth(bd) 按钮边框宽度;command: 按钮消息的回调函数;cursor: 当鼠标移动到按钮指针样式时;font: 按钮上文字的字体;foreground(fg) 按钮的前景色;height: 按钮的高度;image: 按钮上显示的图片;state: 按钮的状态(禁用);text:按钮上显示的文字 ;width:按钮的宽度 padx 设置文本与按钮边框x的距离,pady;activeforeground pressedForegroundcolortextvariable 可变文本,与StringVar等配合使用。先说文本框:1.文本框用于接受用户输入,常用于登录帐号和密码。可以看到一个显示为汉字,另一个是?,就是它的明文和密文设置。我们也可以获取其中的值来验证数据库中的信息进行登录,不过这里我们只是打印出来。它被完美地打印出来。朋友们,看看你能不能在这里写一个登录系统。单行文本框自定义插入值:e1.insert(index,string)#在指定索引位置插入字符串2.多行文本框和文本框的区别在于可以显示多行信息,通常用于显示一些结果。可以看到,多行文字是这样的,我们可以往里面插入文字:tt.insert('insert','Areyouapig')#插入第一行tt.insert('current','Iamapig')#当前插入tt.insert('end','123')#除了在末尾插入,还可以删除:tt.delete('1.0',tk.END)#删除所有文本框的内容另外,有时候文本框需要实时更新内容,所以还有一个方法:tt.update()#更新多行文本框的内容另外,我们还可以在多行文本框中添加其他组件,实现一些功能。1.记住密码功能2.图片查看器我们需要认识一个新的方法,它叫做PhotoImage。它的设计很奇怪,就我个人而言,因为它只支持gif图片。通过以上设置,创建了一个窗口执行函数,在实际应用中可以实现记住密码、查看gif图片等功能。这就是文本框和多行文本框的全部内容。它们还有很多其他的方法:指定位置插入值:tt.mark_set("here","3.2")#创建一个标记,相当于一个索引,第三行两列tt.insert('here',"hello")#inserthellott.mark_unset('here')#删除标记高亮文本:tt.tag_add('tag1','1.3','2.1','2.2')#设置要设置样式的区域tt.tag_config("tag1",background="green",foreground="blue")tt.tag_config("tag2",background="blue",foreground="red")#如果设置了多个样式,新的样式会覆盖旧的样式tt.tag_lower("tag1")#可以通过tagraise()和tag_lower()方法提高和降低某个Tag的优先级,得到多行文本框的值:tt。get('0.0','end')文本绑定鼠标事件:tt.tag_add("link","2.1","2.5")tt.tag_config("link",foreground="blue",underline=True)#选中内容下划线,蓝色背景色defshow_1(event):tt.config(cursor="arrow")#Mousearrowtypedefshow_2(event):tt.config(cursor="xterm")#MouseItypedefclick(event):print('我被点击了')tt.tag_bind("link","",show_1)tt.tag_bind("link","",show_2)tt.tag_bind("link","",click)还原,撤销:tt.edit_undo()#Undott.editredo()#还原更多精彩内容:background(bg) 文本框背景色;foreground(fg)前景色;selectbackground 选中的文字背景色;selectforeground 选中的文字前景色;borderwidth(bd) 文本框边框宽度;字体 字体;show text框中显示的字符,如果是*,表示文本框是密码框;状态 状态;width 文本框宽度textvariable 可变文本,与StringVarBox配合使用这个在我们平时检查答案是单个还是多个时很常见。我们来看看:1.Radiobutton2。Checkbutton使用了一个循环,下面给出一个简单的写法:可以看到几行代码就列出了四个控件。多选框有很多有趣的方法:锚定 文本位置;背景(bg) 背景色;foreground(fg)前景色;borderwidth边框宽度;width 组件宽度;height 组件高度;位图 组件;image 组件;字体 字体;justify 组件对多行文本的对齐方式;text 指定组件的文本;value 指定所选组件中关联变量的值;variable 指定与组件关联的变量;indicatoron是一个特殊的控制参数,当它为0时,组件将被绘制成一个按钮;textvariable为可变文本显示,与StringVar等配合使用。5.listbox列表常用于选择选项。这个比较简单,没什么好说的。六、滑动条、滚动条1、滑动条一行代码就可以搞定,也很简单:默认方向是竖直的,设置orient属性为水平(tk.HORIZONTAL)即可,也可以设置为vertical:orient="vertical"2.滚动条经常和其他组件一起使用,比如列表框和多行文本框。在安装滚动条之前需要做两件事。1、指定组件的yscrollbarcommand参数为Scrollbar的set()方法2、指定Scrollbar的command参数为组件的yview()方法。由于滚动条一般是垂直的,所以我们不改变它的方向。可以看到我们的滚动条是和列表组件连接起来的,滚动条的内容相应的在列表中向下滚动。如果要设置滚动条的位置,只需:sl.set(0.5,1)#使滚动条始终保持在中间位置。滚动条与滑动条相同。它们比较简单,在项目中用到的不多。一般来说,它们都是比较简单的组件。7.画布通常用来绘制各种曲线和位图。Canvas可以轻松创建各种有趣的图形图像。下面我们来了解一下#初始化一个200x100的形状,背景色为蓝色canvas=tk.Canvas(root,bg='blue',height=100,width=200)#创建一个矩形,背景色为绿色,边框线为颜色为红色,线宽为2,虚线长度为3,画笔为gray12,jx=canvas.create_rectangle(100,100,50,50,fill='green',outline='red',width=2,dash=3,stipple='gray12')#圆弧样式为pieslice(弦扇形,抛物线弧)起始角0角偏移180hx=canvas.create_arc(50,100,140,??200,style='pieslice',start=0,extent=180)#创建一条直线,坐标为100,100,长度为200x200,一端有箭头(无,尾尾,两端,箭头形状)zx=canvas.create_line(100,100,200,200,arrow='first',arrowshape='302010')#创建椭圆,背景色redy=canvas.create_oval(50,100,140,??200,fill='red')#创建多边形直角三角形dbx=canvas.create_polygon((150,150,150,200,70,200),fill='red')#创建文本居中显示wz=canvas.create_text((10,10),text='HelloText',anchor='w')canvas.select_from(wz,3)#设置文本的选中起始位置canvas.select_to(wz,7)#设置文本选中的结束位置#创建位图,类型为error(info信息,question问题,hourglasshourglass)canvas.create_bitmap((40,40),bitmap='error')#creategifimg=tk.PhotoImage(file='1.gif')canvas.create_image(10,10,anchor='nw',image=img)#创建组件bt=tk.Button(canvas,text='hello',command)canvas.create_window((100,100),window=bt,anchor='w')#将jx移动到另一个区域cv.coords(jx,(10,10,20,20))#将图形向右移动20px,然后返回canvas.move(jx,20,0)#删除图形canvas.delete(jx)#添加绑定事件,只在点击矩形边框时有效canvas.tag_bind('jx','',command)#左键为1,右键为3,滚轮2canvas绘图还是比较给力的,以上知识点日常使用差不多就够了,可以看:8.掉落-down列表框一般用于某个功能支持选择,这个组件在tkinter中是ttk模块下的,和其他的不一样,所以我们importttk:#打印下拉列表框的值fromtkinterimportttkdeffunction(*arg):print(cb.get())#获取下拉列表框的值Valuecb=ttk.Combobox(root,width=12,state='readonly')#下拉列表框宽度为12只读cb['values']=('请选择-----','1','2','3','4')#Set下拉列表框的内容cb.current(0)#设置当前选择状态为0,也就是第一项cb.bind("<>",function)#绑定函数function,然后触发事件cb.pack()注:下拉列表没有command参数,但是可以设置textvariable进行参数传递九、菜单栏、菜单按钮、选项菜单先说说我们熟悉的菜单与(Menu),主要是我们为了简化软件的使用,避免添加过多的控件而建立的。那么它是如何建立的,请看:1.下拉菜单#创建菜单栏m=tk.Menu(root)#定义一个父菜单文件=tk.Menu(m,tearoff=False)#添加上面定义的父菜单菜单命名为File,放在菜单栏中m.add_cascade(label='file',menu=file)#给File添加一个下拉菜单,并添加相应的命令操作。#如果点击这些选项,就会触发相应的功能file.add_command(label='New',accelerator='Ctrl+N')file.add_command(label='Open',accelerator='Ctrl+O')文件。add_command(label='Save',accelerator='Ctrl+S')#添加分割线file.add_separator()file.add_command(label='Exit',command=root.quit,accelerator='Ctrl+Q')edit=tk.Menu(m,tearoff=False)m.add_cascade(label='edit',menu=edit)edit.add_command(label='cut',accelerator='Ctrl+X')edit.add_command(标签='copy',accelerator='Ctrl+C')edit.add_command(label='paste',accelerator='Ctrl+V')#二级菜单s=tk.Menu(file,tearoff=False)file.add_cascade(label='import',menu=s)s.add_command(label="module")s.add_command(label="textfile")#三级菜单z=tk.Menu(s,tearoff=False)s.add_cascade(label='image',menu=z)z.add_command(label="gif")z.add_command(label="jpg")z.add_command(label="png")z.add_command(label="bmp")")root.configure(menu=m)2.右键弹出菜单在做这件事之前,我们需要先了解一下鼠标绑定事件,因为右键弹出是需要按键的,所以需要了解一下。既然是右键,那我们当然要绑定右键了:root.bind("",function)然后我们写绑定函数,绑定到当前对象上:deffunction(event):m.post(event.x_root,event.y_root)#可以代替菜单,变成其他的菜单,比如s,z,这样就实现了右键弹出菜单的功能,是不是很简单?菜单上的操作还有很多,就不一一展示了。请看下面:#Addasubmenucoption是配置选项add_cascade(option)#Addatogglebuttoncoption是配置选项add_checkbutton(option)#AddafunctionbuttoncoptionisConfigurationoptionadd_command(option)#Addaradiobuttoncoptionasconfigurationoptionadd_radiobutton(option)#添加一个分割线add_separator()#删除index1和index2之间的optiondelete(index1,index2)#获取一个菜单项的属性值entrycget(index,coption)#重新配置一个item的属性in菜单入口configure(index,option)#返回参数位置对应的optionindexindex(i)#在指定位置插入一个子菜单insert_cascade(index,option)#在指定位置插入一个切换按钮insert_checkbutton(index,option))#在指定位置插入一个功能按钮insert_command(index,option)#在指定位置插入一个单选按钮insert_radiobutton(index,option)#在指定位置插入一个分界线insert_separator(index)#代码手动调用一次optioninvoke(index)#在窗口指定位置弹出一个菜单post(x,y)#获取一个option的类型type(index)#获取option的偏移量菜单顶部的选项Shiftyposition(n)#添加选项可以是功能按钮,切换按钮,单选按钮或子菜单,通过类型确认#typeoptionalcascadecheckbuttoncommandradiobuttonseparatoradd(kind,option)3.menubuttonitisthebutton与菜单关联,可以放在任何地方,我们来创建一个看看:defshow():#triggereventprint("hello")mb=tk.Menubutton(root,text="python",relief=tk.RAISED)#菜单按钮配置mb.pack()file=tk.Menu(mb,tearoff=0)#addmenufile.add_checkkbutton(label="Open",command=show)#在菜单中添加确认按钮file.add_command(label="Save",command=show)#添加保存命令file.add_separator()#添加分隔符文件.add_command(label="Exit",command=root.quit)#添加退出命令mb.configure(menu=file)#在主菜单中添加菜单按钮配置4.选项菜单的组件就像一个下拉菜单到一个一定程度上,又比如listbox,我们看下面:","php","c#","c++")#给菜单添加菜单选项o.pack()是不是觉得菜单比较有意思?还可以通过对菜单的理解制作记事本或者其他小工具。其他方法如下:tearoff 分窗,0在原窗口,1点击分为两个窗口,也可以是True,Falsebg,fg background,foregroundborderwidth borderwidthfontfontactivebackgound点击时的背景,有activeforeground,activeborderwidth,disabledforegroundcursor选中菜单选项时的光标形状后右键菜单selectcolor selectedBackgroundtakefocus使用Tab键获取按钮焦点》方法:m.add_cascade添加子optionm.add_command添加命令(label参数为显示内容)m.add_separator添加分隔线m.add_checkbutton添加确认按钮deletedeletesummary本文重点介绍Python自带的GUI模块-----tkinter,由于内容较多,前面的内容主要介绍了它的安装、基本组件、下拉菜单、canvas等,下一篇继续解密PythonGUI的其他内容