我试图深入理解 tkinter 小部件的属性,为此我调用当前小部件对象的方法configure
。我有些选择无法理解他们的目的。
例如,假设我有一个普通的Entry
对象,然后我调用方法configure
或config
来返回当前属性,结果如下(我正在使用以与打印结果相同的方式调用包的函数pprint
:
{'background': ('background',
'background',
'Background',
<border object: 'systemWindowBody'>,
'systemWindowBody'),
'bd': ('bd', '-borderwidth'),
'bg': ('bg', '-background'),
'borderwidth': ('borderwidth',
'borderWidth',
'BorderWidth',
<pixel object: '2'>,
2),
'cursor': ('cursor', 'cursor', 'Cursor', <cursor object: 'xterm'>, 'xterm'),
'disabledbackground': ('disabledbackground',
'disabledBackground',
'DisabledBackground',
<border object: 'systemWindowBody'>,
'systemWindowBody'),
'disabledforeground': ('disabledforeground',
'disabledForeground',
'DisabledForeground',
<color object: '#a3a3a3'>,
'#a3a3a3'),
'exportselection': ('exportselection',
'exportSelection',
'ExportSelection',
1,
1),
'fg': ('fg', '-foreground'),
'font': ('font', 'font', 'Font', <font object: 'TkTextFont'>, 'TkTextFont'),
'foreground': ('foreground',
'foreground',
'Foreground',
<color object: 'Black'>,
'Black'),
'highlightbackground': ('highlightbackground',
'highlightBackground',
'HighlightBackground',
<color object: 'systemWindowBody'>,
'systemWindowBody'),
'highlightcolor': ('highlightcolor',
'highlightColor',
'HighlightColor',
<color object: 'Black'>,
'Black'),
'highlightthickness': ('highlightthickness',
'highlightThickness',
'HighlightThickness',
<pixel object: '3'>,
3),
'insertbackground': ('insertbackground',
'insertBackground',
'Foreground',
<border object: 'Black'>,
'Black'),
'insertborderwidth': ('insertborderwidth',
'insertBorderWidth',
'BorderWidth',
<pixel object: '0'>,
0),
'insertofftime': ('insertofftime', 'insertOffTime', 'OffTime', 300, 300),
'insertontime': ('insertontime', 'insertOnTime', 'OnTime', 600, 600),
'insertwidth': ('insertwidth',
'insertWidth',
'InsertWidth',
<pixel object: '1'>,
1),
'invalidcommand': ('invalidcommand',
'invalidCommand',
'InvalidCommand',
'',
''),
'invcmd': ('invcmd', '-invalidcommand'),
'justify': ('justify', 'justify', 'Justify', <index object: 'left'>, 'left'),
'readonlybackground': ('readonlybackground',
'readonlyBackground',
'ReadonlyBackground',
<border object: 'systemWindowBody'>,
'systemWindowBody'),
'relief': ('relief', 'relief', 'Relief', <index object: 'sunken'>, 'sunken'),
'selectbackground': ('selectbackground',
'selectBackground',
'Foreground',
<border object: 'systemHighlight'>,
'systemHighlight'),
'selectborderwidth': ('selectborderwidth',
'selectBorderWidth',
'BorderWidth',
<pixel object: '1'>,
1),
'selectforeground': ('selectforeground',
'selectForeground',
'Background',
'',
''),
'show': ('show', 'show', 'Show', '', ''),
'state': ('state', 'state', 'State', <index object: 'normal'>, 'normal'),
'takefocus': ('takefocus', 'takeFocus', 'TakeFocus', '', ''),
'textvariable': ('textvariable', 'textVariable', 'Variable', '', ''),
'validate': ('validate',
'validate',
'Validate',
<index object: 'none'>,
'none'),
'validatecommand': ('validatecommand',
'validateCommand',
'ValidateCommand',
'',
''),
'vcmd': ('vcmd', '-validatecommand'),
'width': ('width', 'width', 'Width', 20, 20),
'xscrollcommand': ('xscrollcommand',
'xScrollCommand',
'ScrollCommand',
'',
'')}
当然我们无法分析每个属性和相应的tuple
,但我问你是否有一个指南可以准确解释每个属性的元组的每个部分是什么意思。
如果您想要一个示例,我们可以从属性background
开始。元组如下:
('background',
'background',
'Background',
<border object: 'systemWindowBody'>,
'systemWindowBody')
systemWindowBody
是我通过以下方式调用方法cget
时返回的值:
print(entry.cget('bg'))
现在,3个第一选项呢?为什么我们有一个用大写写的背景和用小写写的背景。我想:也许我们可以使用两者,但实际上我们可以使用小写版本background
,否则我们会收到以下错误:
_tkinter.TclError: unknown option "-Background"
我还想知道为什么有2个重复的小写选项。
我注意到元组中的这种元素模式也用于大多数属性,也许都是。
我很抱歉这个长期的问题,但我真的很想理解为什么这种格式。
答案 0 :(得分:2)
每个选项都是两个或五个值的列表。如果是两个,则它是一个选项别名和实际选项名称。 bg
是一个示例,别名为“bg”,实际的tcl / tk选项名称为“-background”。
对于五个值的情况,五个值为:
选项数据库的根源在类似unix的机器上的X窗口系统中。不幸的是,tkinter世界中没有太多文档。幸运的是,很少需要使用选项数据库,尽管在开始创建小部件之前设置应用程序范围的默认值非常方便。
如果您在交互式python解释器中并运行命令help(Tkinter)
(假设您已导入Tkinter),您将找到命令option_add
,option_get
,{的文档。 {1}}和option_clear
。该文档令人遗憾地假设您熟悉X11选项数据库。