2015-09-07 40 views
-1

我一直在使用tkinter中的OptionMenu小部件進行試驗,並注意到每當我嘗試指定不同的屬性時,如highlightbackground選項,它似乎認爲我告訴它在下拉列表中顯示一個值。我有這個:如何爲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 

萬一我沒有表達自己的不夠清楚以上(清晰度是不是我的強項),我的問題是:我該怎麼告訴這個小工具當它認爲我在告訴別的什麼時該怎麼辦?

+0

選項菜單不會像您認爲的那樣執行選項。是否有一些文檔說明它有這些選項? –

+0

@BryanOakley嗯,我認爲這是一個小部件。而且,除非我被告知否則(發生在我身上),否則tkinter小部件會採用這些選項。就像按鈕,我已經使用了highlightbackground。 –

+0

當你的假設看起來不適合你時,第一步應該是閱讀文檔。 –

回答

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」有沒有optionmenu部件。這是一個方便的功能,可以創建菜單按鈕和菜單,並將它們鏈接在一起。由於它是一個函數而不是類(在tk級別),它不像正常的小部件那樣需要選項/值對。

+0

哦,我的。儘管我昨天排除了你的回答,直到今天我仍然完全掌握了邏輯運作的真實性。哇。漂亮的東西。 –

相關問題