Tkinter编程应知应会(26)-通过OptionDB控制控件属性

到前一篇文章为止,我们基本上对Tkinter中的每一种基本控件都进行了简单的说明。在这些的示例代码中,用户可以通过属性控制每个控件的前景色,背景色,字体等各种属性。这种方式的直观易懂,但是存在几个缺点:

1.即使希望同样的设定,也需要每个控件单独制定。

2.设定信息淹没在代码中,无论是增减还是调整属性都需要修改代码。麻烦不说还有可能破坏代码的完整性。

这两个问题都可以通过Tkinter提供的OptionDB解决。接下来我们以计算器小程序为例说明其用法。这个程序的初始状态如下:

第一个问题,Tkinter提供了option_add方法用户根据分类分类制定控件属性的方式,例如对于表示计算结果和表达式的两个标签控件来讲,可以使用下面的代码指定它们的背景色:

 

root.option_add('*Label.background', "#a0ffa0")
 

代码中‘*Label.background’的含义就是所有Label控件的背景色。

如果需要对每个控件进行单独控制,首先要为控件指定名称。下面的代码通过name属性分别为两个标签控件指定了各自的名称。

 

 

# create a label to change state.upper_display = Label(root,                      name='upperDisplay',                      foreground="#000000",                      width=24, anchor=E)upper_display.grid(row=1, column=0, columnspan=4, sticky=E + W)
# create a label to change state.lower_display = Label(root,                      name='lowerDisplay',                      foreground="#000000",                      width=12, anchor=E)lower_display.grid(row=2, column=0, columnspan=4, sticky=E + W)

名称指定完成之后就可以使用名称为特定的控件指定属性了。为了和分类指定想区别,控件的名称必须小写。

 

ftTimes1 = Font(family='Times', size=12, weight=BOLD)ftTimes2 = Font(family='Times', size=24, weight=BOLD)root.option_add('*upperDisplay.font', ftTimes1)root.option_add('*lowerDisplay.font', ftTimes2)root.option_add('*Button*font', ftTimes1)

除了两个标签之外,代码还顺便为所有的按钮指定了字体,其结果如下:

通过上面的例子可以看到,通过使用OptionDB,只要使用很少的代码,就可以实现同时为多个控件指定属性的功能。除此之外,Tkinter还提供了通过配置文件修改控件属性的功能。下面的代码就是指定计算器中每个控件的字体和颜色的实例。

 

*Label.background:#a0ffa0*upperDisplay.font:times 12 bold*lowerDisplay.font:times 24 bold*Button*font: Meiryo 12 bold*Button*foreground:#007700*ckey*foreground:#ff0000*cekey*foreground:#ff0000*back*foreground:#ff0000*devkey*foreground:#0000ff*mulkey*foreground:#0000ff*minukey*foreground:#0000ff*pluskey*foreground:#0000ff*equalkey*foreground:#000000

配置文件完成之后,取一个适当的名字保存即可。本例中使用26 OpDb.txt。

最后一步就是在代码中增加下面一行以读入配置文件:

 

root.option_readfile('26 OpDb.txt')

程序执行结果如下:

 

总结如下:

1.为各个控件指定name属性

2.代码中忽略可能变化的属性

3.通过OptionDB为控件类或单个控件指定属性

 

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

https://github.com/xueweiguo/TkinterPrimer/blob/master/Sample/26%20OptionDatabase.py

https://github.com/xueweiguo/TkinterPrimer/blob/master/Sample/26%20OpDb.txt

 

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

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值