小言_互联网的博客

Python GUI入门(26)-Themed widget

454人阅读  评论(0)

经过了二十几篇的介绍,相信读者已经基本掌握了Python自带的GUI库Tkinter的用法了。使用Tkinter库可以定义每个控件的风格,但这样做的另一个侧面就是软件的风格会独立于操作系统,多少会显得有些另类。例如前面文章讲到的计算器界面就是如此。

为了解决这个问题,在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)

最后启动主循环:

 

root.mainloop()

如果不实现说明,读者很有可能不会注意到我们在使用ttk库中的控件。

这是一件很了不起的事情。

 

完整代码可以从以下地址下载:

https://github.com/xueweiguo/TkinterPrimer/blob/master/Sample/27%20TtkWidget.py

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请关注微信公众号【面向对象思考】


转载:https://blog.csdn.net/craftsman1970/article/details/102555564
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场