Python GUI入门(27)-Themed widget
原创
©著作权归作者所有:来自51CTO博客作者大连木匠的原创作品,请联系作者获取转载授权,否则将追究法律责任
经过了二十几篇的介绍,相信读者已经基本掌握了Python自带的GUI库Tkinter的用法了。使用Tkinter库可以定义每个控件的风格,但这样做的另一个侧面就是软件的风格会独立于操作系统,多少会显得有些另类。例如前面文章讲到的计算器界面就是如此。
![Python GUI入门(27)-Themed widget_Python](https://s2.51cto.com/images/blog/202207/29095856_62e33ee0cdefd71267.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
为了解决这个问题,在8.5版以后,Tkinter有提供了另外一套ttk控件。这些控件在基本继承tkinter控件用法的基础上对控件的用法进行了调整,用法更为一致的同时还可以自动使用操作系统的风格。
由于控件的用法和之前的tkinter控件区别不大,因此我们说明的节奏会稍微加快,今天首先是各种按钮的用法,还是先看动作视频:
和之前的控件的唯一区别就是更像一个普通的Windows程序了。接下来介绍代码,首先是导入ttk库。
from tkinter import *from tkinter.ttk import *
构建主窗口没有变化:
# create the main windowroot = Tk()
构建最上层的标准按钮:
s_frame = LabelFrame(root, text='Standard Button')s_frame.grid(row=0, column=0)s_button = Button(s_frame, text='Button', width=12)s_button.grid(row=0, column=0)
需要注意的是,由于ttk库的导入方式,这里使用的是ttk库中的控件。接下来构建CheckButton示例:
c_frame = LabelFrame(root, text='CheckButton')c_frame.grid(row=1, column=0)
def d_changed(*args): c_text.set('Value={}{}{}{}'.format(d3.get(),d2.get(),d1.get(),d0.get()))
c_text = StringVar()c_text.set('Value=0000')c_label = Label(c_frame, textvariable=c_text, width=10)c_label.grid(row=0, column=0)d3 = IntVar()d3.trace_variable('w', d_changed)c_button = Checkbutton(c_frame, text='D3', variable=d3)c_button.grid(row=0, column=1)d2 = IntVar()d2.trace_variable('w', d_changed)c_button = Checkbutton(c_frame, text='D2', variable=d2)c_button.grid(row=0, column=2)d1 = IntVar()d1.trace_variable('w', d_changed)c_button = Checkbutton(c_frame, text='D1',variable=d1)c_button.grid(row=0, column=3)d0 = IntVar()d0.trace_variable('w', d_changed)c_button = Checkbutton(c_frame, text='D0', variable=d0)c_button.grid(row=0, column=4)d3.set(0)d2.set(0)d1.set(0)d0.set(0)
构建Radiobutton:
r_frame = LabelFrame(root, text='RadioButton')r_frame.grid(row=2, column=0)
r_label = Label(r_frame, text='Value=0', width=10)r_label.grid(row=0, column=0)def r_changed(*arg): r_label.configure(text='Value='+str(r_value.get()))r_value = IntVar()r_value.trace_variable('w', r_changed)r_value.set(0)r_button = Radiobutton(r_frame, text='0 ', variable=r_value, value=0)r_button.grid(row=0, column=1)r_button = Radiobutton(r_frame, text='1 ', variable=r_value, value=1)r_button.grid(row=0, column=2)r_button = Radiobutton(r_frame, text='2 ', variable=r_value, value=2)r_button.grid(row=0, column=3)r_button = Radiobutton(r_frame, text='3 ', variable=r_value, value=3)r_button.grid(row=0, column=4)
最后启动主循环:
如果不实现说明,读者很有可能不会注意到我们在使用ttk库中的控件。
这是一件很了不起的事情。
![Python GUI入门(27)-Themed widget_微信公众号_02](https://s2.51cto.com/images/blog/202207/29095857_62e33ee11ec5299930.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
完整代码可以从以下地址下载:
https://github.com/xueweiguo/TkinterPrimer/blob/master/Sample/27%20TtkWidget.py
觉得本文有帮助?请分享给更多人。
阅读更多更新文章,请关注微信公众号【面向对象思考】