以下内容为本人学习笔记,如需转载请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/2G...本文约1685字,阅读时间6分钟。内容不多,但也费了一番功夫。如果想交流,欢迎关注我,在评论区留言。感谢您的点赞、收藏和分享。本文属于系列文章的第二篇,后续是《Python 内置界面开发框架 Tkinter入门篇 甲》,欢迎关注我的微信公众号「englyf」查看本系列相关文章。基础控件上一篇介绍了一些基础控件,还有一些还需要进一步介绍。Scale比例尺上方已经引入的控件,在动态修改数值时,仍然不方便用户使用。为了更方便的修改数值,比如当用户可以按住鼠标键直接拖动控件时,数值会随之改变。比例尺控件Scale就可以实现这样的功能。我们举个栗子,在主界面添加一个比例尺控件。importtkinterastkwindow=tk.Tk()scale=tk.Scale(master=window,orient=tk.VERTICAL,length=150,from_=0,to_=200)scale.pack()window.mainloop()实例化控件scale,参数orient指定比例尺的方向(VERTICAL对应垂直方向,HORIZONTAL对应水平方向),参数length设置控件的长度(以像素为单位),参数from_设置的最小值值范围,参数设置值范围的最大值。获取控件的Scale当前值,使用get(),返回整数值或浮点数。设置控件Scale的当前值,使用set(),输入设置值。看显示效果,拖动中间的滑块,将控件当前值拉到168。Listbox列表如果有很多类似的内容需要显示给用户,那么适合使用列表控件Listbox。控件列表框用于显示单行文本项的列表,允许用户浏览列表的内容并选择一个或多个选项。例如用控件Listbox显示花列表tk。StringVar(value=contents)listbox=tk.Listbox(window,bd=2,bg="#dddddd",listvariable=listvar)listbox.grid()contents.append("辅助类")listvar.set(contents)window.mainloop()在实例化控件Listbox时,也使用了一个参数listvariable,用于快速方便的操作内部数据,类似于其他控件的textvariable参数。金额必须是[]类型的列表。首先直接创建一个列表,然后传入StringVar(),转换成特殊格式返回。然后将返回值listvar分配给控件Listbox实例化的参数listvariable。以后需要更新或读取列表控件的内容时,直接调用listvar.set()或listvar.get()即可。控件Listbox其实有自己的接口来操作内部数据,但是相对于初始化listvariable参数来说太硬核了,不够灵活,所以就不展开了。看一下显示效果的主题控件。Tkinter框架提供了一些支持切换主题外观的控件。这些控件包含在tkinter.ttk模块(主题模块)中,这些控件被称为主题控件。比如上面介绍的基本控件,在theme模块中基本上都有相应的主题版本可用,这使得tkinter做出来的界面可观性高很多。另外,基础控件和主题控件的API基本相似,仅有少量差异,可以轻松切换。快速切换主题控件如果遗留代码使用了基础控件,为了快速用主题控件覆盖,可以在导入库时参考通配符导入(*),这样就不需要大量修改代码。让我们先看看假设的遗留代码。代码中只有一个按钮Button。fromtkinterimport*window=Tk()btn=Button(text="Clickme!",width=25)btn.pack()window.mainloop()显示效果是这样的然后添加导入的主题模块ttkfromtkinterimport*fromtkinter.ttkimport*window=Tk()btn=Button(text="Clickme!",width=25)btn.pack()window.mainloop()看看新的显示效果好像是主题控件风格确实和基本控件不同,主题控件相对更现代。所以为什么?向下看。切换主题既然主题库支持切换主题,那么如何切换到不同的主题呢?有哪些主题可用?不同的主题其实对应不同的风格,tkinter.ttk模块提供了操作主题控件风格的Style类。直接看下面的示例代码fromtkinterimport*fromtkinter.ttkimport*window=Tk()style=Style()print(style.theme_names())print(style.theme_use())btn=Button(text="Clickme!",width=25)btn.pack()window.mainloop()执行和上面一样的程序界面,但是命令终端会输出(.venv)D:\englyf\python>pythonmain.py('winnative','clam','alt','default','classic','vista','xpnative')以上代码在vista上调用Style类实例的theme_names()并返回所有tkinter支持的主题类型('winnative'、'clam'、'alt'、'默认'、'经典'、'vista'、'xpnative')。使用空输入调用theme_use()并返回默认主题类型,这里是vista。如果需要改变主题类型,可以调用theme_use()输入相应的主题名称。如果将主题类型设置为winnative,您会注意到控件的样式变得与基本控件一致。似乎vista更现代。然后,简单介绍一些其他的主题控件,比如进度条Progressbar。Progressbar进度条在某些情况下,有些操作比较耗时,用户不知道这个操作要花多长时间,就需要告诉用户剩余的操作时间。为了直观地反映剩余时间或执行进度,可以使用控件Progressbar。我们举个栗子,在主界面添加一个进度条控件。importtkinterastkimporttkinter.ttkasttkwindow=tk.Tk()progressbar=ttk.Progressbar(master=window,maximum=50,value=50)progressbar.pack()window.mainloop()看显示效果由于篇幅有限,本系列教程还没有结束,下一篇《Python 内置界面开发框架 Tkinter入门篇 丙》将在本的后面推送,如果您对本教程感兴趣或者想和我交流更多精彩内容,请关注我的微信公众号【englyf】我在等你!
