【问题标题】:How to specify attributes like "highlightbackground" for the OptionMenu widget in tkinter?如何在 tkinter 中为 OptionMenu 小部件指定“highlightbackground”等属性?
【发布时间】:2015-09-07 23:05:35
【问题描述】:

我一直在尝试使用 tkinter 中的 OptionMenu 小部件,并注意到每当我尝试指定不同的属性时,例如 highlightbackground 选项,它似乎认为我在告诉它一个要在下拉列表中显示的值。我有这个:

self.color_menu = OptionMenu(self.main, self.colorForMenuText, *self.colors,highlightbackground = self.color)# 
self.color_menu.place(relx = 0.5, rely = 0.4, anchor = "center")

我希望它能够执行上述功能。然而,它反而崩溃并吐出这一切:

Exception in Tkinter callback
Traceback (most recent call last):
File "/Users/odimartino/.pyenv/versions/3.4.2/lib/python3.4/tkinter/__init__.py", line 1533, in __call__
return self.func(*args)
File "PhotoWall.py", line 29, in setting
self.color_menu = OptionMenu(self.main, self.colorForMenuText, *self.colors, highlightbackground = self.color)#
File "/Users/odimartino/.pyenv/versions/3.4.2/lib/python3.4/tkinter/__init__.py", line 3331, in __init__
raise TclError('unknown option -'+kwargs.keys()[0])
TypeError: 'dict_keys' object does not support indexing

以防我在上面表达得不够清楚(清晰不是我的强项),我的问题是:当它认为我在告诉它其他内容时,我如何告诉这个小部件该怎么做?

【问题讨论】:

  • 选项菜单不会像您想象的那样采用选项。您是否正在阅读一些文档,说明它具有这些选项?
  • @BryanOakley 好吧,我认为它是一个小部件。而且,除非我将被告知其他情况(经常发生在我身上),否则 tkinter 小部件会采用这些选项。就像我使用 highlightbackground 的按钮一样。
  • 当您的假设似乎不适合您时,第一步应该始终是阅读文档。
  • @BryanOakley 感谢您的回复,尽管我可能有点无知。这就是学习过程!也许有一天我会成为世界级的开发者。在那之前...好吧,我可以梦想成真...无论如何,我正在阅读的 effbot 文章并没有说它是一个不寻常的小部件...所以我认为它与我见过的所有小部件完全一样迄今。感谢您的帮助!

标签: python-3.x tkinter attributes


【解决方案1】:

OptionMenu 不是传统的 tkinter 小部件。它不接受命令行上的选项。您必须创建小部件,然后在它返回的对象上调用 configure 方法。

var = tk.StringVar()
om = tk.OptionMenu(root, var, "one", "two", "three")
om.configure(highlightcolor = "red")

要获得对关联菜单的引用,请使用winfo_children,它会返回一个包含一个元素的列表:

menu = om.winfo_children()[0]
menu.configure(...)

原因是底层工具包“tk”没有选项菜单小部件。这是一个方便的功能,它创建一个菜单按钮和一个菜单,并将它们链接在一起。由于它是一个函数而不是一个类(在 tk 级别),它不像普通小部件那样采用选项/值对。

【讨论】:

  • 天哪。尽管我昨天排除了你的回答,但直到今天我才完全掌握了这种逻辑究竟是如何运作的令人敬畏的。哇。非常整洁的东西。
猜你喜欢
  • 2017-02-16
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 2012-04-11
  • 2011-03-30
  • 2021-06-28
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多