当前位置: 首页 > 科技观察

Python图形用户界面GUI解密(下)

时间:2023-03-14 17:50:56 科技观察

上一篇主要介绍了tkinter的安装,基本组件,下拉菜单,canvas等,Python图形用户界面GUI解密(上),这篇文章紧接着上一篇继续围绕tkinter知识展开。10.框也叫窗口。它在原来的窗口的基础上创建了另一个窗口。一般用于多窗口交互,如聊天、玩游戏等。我们看一下:fm=tk.Frame(root)#atroot创建一个framefm.pack()#Addin#创建两个framef1=tk.Frame(fm)f2=tk.Frame(fm)#添加组件f1。pack()f2.pack()在刚刚创建的frame上给两个frame添加两个component,用不同的颜色来区分tk.Label(f1,text='labelone',bg='green').pack()tk.Button(f1,text='按钮一',bg='绿色').pack()tk.Label(f2,text='标签二',bg='红色').pack()tk.Button(f2,text='buttontwo',bg='red').pack()我们可以简单理解为在主窗口中放置一个父窗口,然后父窗口添加两个子窗口,每个子窗口创建两个组件.这部分在我们交互的时候还是很有用的。11.弹窗,输入1.messagebox接下来要说的就是弹窗了。我们一般需要一个需要提示的窗口,有确认返回。我们来看一下:要正常使用这些功能,我们需要先引入一个模块messagebox(消息框),我们可以将其分为以下几种弹窗类型:注意messagebox必须先导入:fromtkinterimportmessagebox1。提示信息messagebox.showinfo(title='Prompt',message='Youneedthisdo')2.警告messagebox.showwarning(title='warning',message='youcan'tdothis')3.错误消息框。showerror(title='error',message='youdidsomethingwrong')前几个都是提示弹窗。下面介绍侧重于与用户交互,让用户选择的弹窗:4.询问选择messagebox.askquestion(title='choose',message='Doyoudothis')5.确认或取消messagebox.askokcancel(title='Select',message='Areyoudoingthis')6.是,没有messagebox.askyesno(title='Select',message='Areyoudoingthis')7.重试,取消messagebox.askretrycancel(title='choice',message='doyoudothis')如果要在一个函数中设置所有这些类型,有,就是_show()函数,用法如下:messagebox._show函数控件参数:默认消息框按钮图标消息框图标message  消息框显示的消息parent消息框父组件titletitletypetype2.simpledialog为了提高用户交互性,我们需要设置一些框供用户选择,simpledialog对你来说必不可少,一起来看看:导入模块:fromtkinterimportsimpledialogsimpledialog提供了三种输入类型,分别是字符串整型浮点数。记下来吧:simpledialog.askinteger(title='display',prompt='input',initialvalue='12')总的来说还是挺简单的,没什么好说的。12、文件对话框用于打开文件对话框,选择文件或文件夹。让我们看看它是如何使用的:首先,让我们导入文件选择模块:fromtkinterimportfiledialog1。返回文件名filedialog.askopenfilename()2。返回文件流对象filedialog.askopenfile()3.返回多个文件流对象filedialog.askopenfiles()4.返回多个文件名对象filedialog.askopenfilenames()5.返回目录名filedialog.askdirectory()6.返回文件流和createFilefiledialog.asksaveasfile()7.返回保存的文件名filedialog.asksaveasfilename()8.打开文件对话框显示当前目录下的所有文件夹filedialog.LoadFileDialog(root).go()9.保存文件对话框filedialog.SaveFileDialog(root).go()十三、树状列表它就像一棵树,把它的子元素包裹在里面,它的模块也在ttk里,见:fromtkinterimportttkt=ttk.Treeview(root)#加载树控件t.pack()n=t.insert('',0,text="hello",values=("1"))#向控件中插入一个值n1=t.insert(n,1,text="cq",values=("2"))#插入一个属于它的子元素,即一个二级元素n2=t.insert(n,1,text="sc",values=("2"))t.insert(n1,2,text='fd',values=("3"))#Insert一个属于它的三级元素t.insert(n1,2,text='we',values=("3"))t.insert(n2,2,text='1',values=("3"))t.insert(n2,2,text='2',values=("3"))这样就可以循环插入,即这样方便我们列出大型项目的目录。例如,您可以使用此磁盘目录。十四、选择颜色时使用颜色对话框。丰富的颜色可以让你处理图片和画图,非常好用:fromtkinterimportcolorchooser#importmodulecolorchooser.askcolor()#打开颜色选择对话框十五、组件布局组件基本我们都介绍完了,相信大家通过本章的学习,应该对tkinter有一个深刻的理解。除了组件的使用,最重要的是组件的布局。让我们谈谈如何将组件放在正确的位置。组件的排列方式有3种:packgridplace.1.pack按照上、下、左、右的方式排列,例如:tk.Label(root,text='1').pack(side='top')#上tk.Label(root,text='2').pack(side='bottom')#undertk.Label(root,text='3').pack(side='left')#lefttk.Label(root,text='4').pack(side='right')#right也可以设置组件填充方式,如:tk.Label(root,text='1').pack(fill='y')#垂直填充tk.Label(root,text='2').pack(fill='x')#水平填充tk.Label(root,text='3').pack(fill='both')#Horizo??ntalFillverticallytk.Label(root,text='4').pack(fill='none')#不填充2.grid是网格布局,分成几行和列。所以一般是设置行和列。例如:tk.Label(root,text='1').grid(row=3,column=3)#在第三行第三列插入一个1。还可以设置组件跨越的行数和列数以及内外间距距离:tk.Label(root,text='1').grid(row=3,column=3,rowspan=3,ipadx=6)#横跨3行单元格的距离为6tk.Label(root,text='2').grid(row=4,column=4,columnspa=3,pady=8)#横跨3列的边框距离3.place这是最简单灵活的布局,使用组件坐标来放置组件。tk.Label(root,text='43').place(x=100,y=200,width=10,height=5)#距离左边100,宽度和高度200到顶部是10X5。十六、鼠标键盘事件说完Layout接下来,该说最重要的了,绑定事件,没有它组件是没有灵魂的。我总结了以下几点:bind(sequence,func,add)bind_class(className,sequence,func,add)bind_all(sequence,func,add)事件参数:  sequence        绑定的事件;例如''表示ctrl+N键或者右键点击func      绑定的事件处理器;添加      可选参数,空字符或'+';className        绑定的类;鼠标键盘事件  鼠标左键按下,2表示中键,3表示右键; 同上;   松开鼠标左键;  按住鼠标左键移动;  双击左键;  鼠标指针进入某个组件区域;  鼠标指针离开某个组件区域;   滚动滚轮;    按下A键,A可以换成其他键;   同时按下alt和A;alt可以用ctrl和shift代替;  快速按下A两次;   大写状态下按A;window事件Activate    在组件从不可用变为可用时触发;Configure    在组件大小变化时触发;Deactivate    在组件由可用变为不可用时触发;Destroy    在组件被销毁时触发;Expose     是组件从遮挡状态暴露出来时触发;unmap      在组件从显示状态变为隐藏状态时触发;Map    在组件从隐藏状态变为显示状态时触发;FocusIn    组件获得焦点时触发;FocusOut    在组件失去焦点时触发;Property    在删除或更改表单的属性时触发;Visibility    组件变为可见时触发;response事件对象(defunction(event)):char      键字符,只对键盘事件有效;keycode       键名,只对键盘事件有效;keysym      键码,只对键盘事件有效;num      鼠标键,只对鼠标事件有效;type    触发的事件类型;widget    引发事件的组件;width,height      组件改变大小,只对Configure有效;x,y       鼠标当前位置相对于窗口;x_root,y_root      鼠标当前位置相对于整个屏幕。以上就是我学习tkinter总结出来的所有知识点。可能有些地方没有说清楚。我希望请指正我