经过了二十几篇的介绍,相信读者已经基本掌握了Python自带的GUI库Tkinter的用法了。使用Tkinter库可以定义每个控件的风格,但这样做的另一个侧面就是软件的风格会独立于操作系统,多少会显得有些另类。例如前面文章讲到的计算器界面就是如此。
为了解决这个问题,在8.5版以后,Tkinter有提供了另外一套ttk控件。这些控件在基本继承tkinter控件用法的基础上对控件的用法进行了调整,用法更为一致的同时还可以自动使用操作系统的风格。
由于控件的用法和之前的tkinter控件区别不大,因此我们说明的节奏会稍微加快,今天首先是各种按钮的用法,还是先看动作视频:
和之前的控件的唯一区别就是更像一个普通的Windows程序了。接下来介绍代码,首先是导入ttk库。
from tkinter import *
from tkinter.ttk import *
构建主窗口没有变化:
# create the main window
root = 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
查看评论