以下内容为本人学习笔记,如需转载请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/2G...这篇文章约4158字,阅读需要10分钟,内容不多,但也耗费了一些精力。如果想交流,欢迎关注我,在评论区留言。感谢您的点赞、收藏和分享。农历新年开始了。打工的烦心事可以暂时停止,学习却不能停止!上一期Tkinter有提到,python其实有PyQt、wxPython和Tkinter三种流行的GUI开发框架。上一篇文章也介绍了wxPython,今天就来给大家介绍一下Tkinter吧!Tkinter是一个嵌入在python标准库中的界面开发框架,堪称皇亲国戚。这么火的python,怎么能不了解它内置的界面开发框架呢?Tkinter有很多强大的特性,比如跨平台特性。相同的代码可以轻松运行在Windows、macOS和Linux系统环境中。它的视觉元素都是基于本地系统元素渲染的,所以和原生开发没有区别。此外,与其他GUI框架相比,Tkinter非常轻巧紧凑。这样带来的缺点很明显,界面风格有些落伍。如果你需要开发一个光鲜亮丽的应用,可以参考我的其他博文,在这里你可以找到其他的解决方案,总有适合你的!而且轻量化的优势也非常突出。如果花哨的可视化与你无关,Tkinter真的可以开箱即用,没有复杂的开发过程,方便专注于功能的快速实现。紧急的工具软件,活捉Tkinter是很有必要的。以往的相关文章,有兴趣的可以关注我的微信公众号“englyf”查看。很荣幸得到您的关注!这将是一个系列文章,您可以在其中了解:Tkinter应用程序的基本框架是什么样的?常用的基本控件有哪些?除了基本控件,还有主题控件吗?如何布局界面?如何与界面元素交互?手写一个简单的记事本应用程序。本文所有测试代码均在win10x64上运行。基本框架已经准备就绪。八戒为了见金特,像娶媳妇一样,匆匆揭开了自己的盖头。新建文件main.py,先写个helloworld!importtkinterastkwindow=tk.Tk()window.title("helloworld!")window.mainloop()可以看到需要先导入库tkinter。名字有点长,为了后面的引用方便,所以起名为tk。大多数界面应用程序都需要一个顶层窗口,它是通过实例化类Tk获得的。然后在这个顶层窗口的标题栏上设置标题,调用方法title(),传入“helloworld”。最后,为了响应用户交互和输入,必须调用主窗口的mainloop()来启动事件循环。tkinter虽然是python标准库内置的GUI框架,但是使用前必须先安装tk库。pipinstalltk安装完成后,使用piplist确认PackageVersion--------------------pip22.3.1setuptools56.0.0tk0.1.0撰写本文时,最新的当前安装的版本是0.1.0。以上环境配置说明建议在预先准备好的虚拟环境中执行。至于如何配置虚拟环境,可以看我的另一篇文章《Python:灵活的开发环境》然后在环境中输入脚本启动命令pythonmain.py,看看运行的界面程序是什么样子的?从上面的代码来看,没有多余的部分,确实可以使用了。下面是一些基本常用的控件控件类说明Label文本标签,显示静态文本Button按钮,可点击按钮Frame矩形区域,组合相关控件Entry单行输入框,input单行文本Text多行输入框,inputmultipleLinetextSpinbox范围输入框,选择指定范围内的值Scale比例尺,拖动按钮选择值Progressbar进度条,显示进度Listbox列表,显示浏览和选择单行文本项的列表当然,tkinter中有很多基本的控件。罗列一下,限于篇幅,本文重点介绍入门级。如果需要查找更全面的资料,可以持续关注本公众号的后续更新。那么我们就从上表中挑出几个基本控件来详细讲解一下,继续往下看。当使用Label文本标签作为界面时,如果需要显示一些静态文本,比如在一些元素前面显示一个名字,那么就可以使用控件Label。此处请注意,Label控件旨在向用户显示文本,而不是获取文本。例如显示一行文本displaytextwithframeworktkinterimporttkinterastkwindow=tk.Tk()lbl=tk.Label(master=window,text="displaytextwithtkinterframework",fg="white",bg="black",width=40,height=10)lbl.pack()window.mainloop()实例化类Label时,演示了传入的参数master、text、fg、bg、width和height。参数master用于指定实例化控件放置在哪个父控件中,这里指定实例化控件Label放置在顶层窗口window中。注意:如果省略master参数,则实例化的控件默认放置在顶层窗口。参数text传入的内容就是要显示的文本字符串。参数fg和bg分别是fontground和background的缩写,分别代表字体颜色和背景颜色。您可以输入有效的颜色名称,例如“白色”、“黑色”、“红色”、“橙色”、“黄色”、“绿色”、“蓝色”、“紫色”等,或者输入一个RGB值以#开头,例如“#34A2FE”。参数width和height分别用于设置控件的宽度和高度。需要注意的是,上面使用的参数width和height的单位不是像素,而是文本单位。一个单位宽度表示文本字符0的宽度,一个单位高度表示文本字符0的高度。因此,如果宽高值相等,实际显示效果不会是正方形。上面说了,控件不能简单的创建出来就显示出来。为了显示控件,还需要调用几何管理器(geometrymanager),如代码所示,这里使用的几何管理器是pack。当然你也可以选择其他管理器,在后面的界面布局主题章节会专门介绍,继续阅读。看显示效果另外,tkinter提供了一些带有文本的控件,比如Label等,在实例化的时候,还有一个非常有用的参数textvariable。这个参数需要传入一个tkinter提供的特定字符串类型的变量。然后,当需要读取和修改控件文本时,直接操作传入参数textvariable的变量即可。例如importtkinterastkwindow=tk.Tk()var_lbl=tk.StringVar()var_lbl.set("displaytextwithtkinterframework")lbl=tk.Label(master=window,fg="white",bg="black",width=40,height=10,textvariable=var_lbl)lbl.pack()print(f"{var_lbl.get()}")window.mainloop()通过tkinter提供的StringVar()生成一个特殊的字符串类型的数量被分配给变量var_lbl,然后传递给控件实例化的参数textvariable。读取控件Label的文本时,可以通过var_lbl.get()获取。如果需要修改控件的文本,可以通过var_lbl.set()传入一个字符串。执行的程序界面同上,但是命令终端会输出(.venv)D:\englyf\python>pythonmain.pydisplaytextwithtkinterframeworkButton按钮在界面中,为了触发一些动作,一般通过单击按钮开始。那么,tkinter是如何添加按钮控件的呢?我们举个栗子,添加一个按钮,文本显示为Clickme!。将tkinter导入为tkwindow=tk.Tk()btn=tk.Button(text="Clickme!",width=25,height=5,bg="blue",fg="yellow")btn.pack()window.mainloop()参数textinput显示的文字串,参数width输入控制宽度,参数height输入控制高度,参数bg输入代表背景色名称,参数fg输入代表字体颜色名称。需要注意的是,上面使用的参数width和height的单位也是文本单位。控件Button还支持参数textvariable。再看看显示效果,你可能会有疑问,为什么在代码中看不到触发动作的内容呢?不要恐慌!这其实属于交互的范畴,在后面的交互章节专门介绍,继续往下看。Frame矩形区域在一般的界面中,为了展示丰富的功能,往往需要将各种控件组合在一起,这时就需要有控件来充当组合粘贴板的功能,而控件Fra??me正好可以担当起这个重任.控件Fra??me用来组合相关的控件,或者在控件之间提供一个填充的矩形区域,所以Frame是一个控件容器,也属于布局的内容。先说一下,方便后面演示其他控件时引用控件Fra??me。例如,向控件Frame添加一个静态标签Label和一个按钮Button。将tkinter导入为tkwindow=tk.Tk()frame=tk.Frame()label=tk.Label(master=frame,text="I'malabelinFrame")label.pack()button=tk.Button(master=frame,text="I'mabuttoninFrame")button.pack()frame.pack()window.mainloop()为了将控件Label和Button粘贴到控件容器Frame中,只需要把控件容器Frame实例的实例引用赋值给各个控件的实例化参数master。相当于为每个控件指定一个父控件,所以这里的控件Label和Button也称为子控件。道理类似:一个孩子只能有一个爸爸,而一个爸爸可以有多个孩子。看显示效果,可以看到控件Label是排在控件Button上面的,那怎么反转呢?将tkinter导入为tkwindow=tk.Tk()frame=tk.Frame()label=tk.Label(master=frame,text="I'malabelinFrame")button=tk.Button(master=frame,text="I'mabuttoninFrame")button.pack()label.pack()frame.pack()window.mainloop()看显示效果Entry单行输入框一般会有一些输入框界面,比如现在要介绍的单行文本输入框控件Entry。如果输入的内容比较少,那么适合使用这个控件Entry。我们举个栗子,添加一个单行文本输入框。importtkinterastkwindow=tk.Tk()entry=tk.Entry(fg="yellow",bg="blue",width=50)entry.pack()window.mainloop()实例化一个单行输入框控件,参数fg代表字体颜色,参数bg代表背景颜色,参数width也是文本单元的宽度。与其关注输入控件的颜色,不如关心如何从输入控件读取内容。要获取完整内容,请使用get()。要清除控件的内容,请使用delete()。输入参数first和last设置要删除的字符索引范围,从first开始到last结束,不包括last。last可以忽略,也可以填tk.END,表示删除到最后位置的内容。要插入内容,请使用insert()。输入参数index和string在索引index处设置,内容字符串被插入。ControlEntry还支持参数textvariable。看显示效果Text多行输入框再看多行输入框控件Text。如果输入的内容很多,需要换行显示,那么用这个控件Text比较合适。我们举个栗子,添加一个多行文本输入框。importtkinterastkwindow=tk.Tk()text=tk.Text(fg="yellow",bg="blue",width=50)text.pack()window.mainloop()实例化多行输入框控件,入参类似于控件Entry,此处略过。专注于读写这个控件的内容。要获取内容,请使用get()。如果没有输入参数,会导致程序执行异常。因为该方法需要输入至少一个参数索引,用于指示采集的起始位置。您还可以输入一个额外的参数索引,用于指示采集的结束位置。这个参数可以忽略。如果省略,则表示获取的内容到达最终结束位置。要清除控件的内容,请使用delete()。要插入内容,请使用insert()。输入参数index和chars设置在indexindex以插入内容字符。index可以使用类似
