我想要一個OptionMenu類列表選擇器,但我想有嵌套選項。我希望它們像嵌套菜單一樣(文件 - >保存),但我需要將其網格化。如果這是不可能的(寫作自定義小部件不足),我將最終有兩個選擇器,其中第一個選擇「主菜單」,第二個選擇「子菜單」,但我會真的很想避免這樣做。是否有像OptionMenu可以嵌套的任何Tkinter小部件?
1
A
回答
4
上午optionmenu只是一個便利的功能,創建menubutton和菜單。你可以很容易地做到這一點。以下是一個示例:
import Tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
items = {"one": ["a","b","c"],
"two": ["d","e","f"],
"three": ["g","h","i"]}
self.the_value = tk.StringVar()
self.the_value.set("a")
self.menubutton = tk.Menubutton(self, textvariable=self.the_value, indicatoron=True)
self.topMenu = tk.Menu(self.menubutton, tearoff=False)
self.menubutton.configure(menu=self.topMenu)
for key in sorted(items.keys()):
menu = tk.Menu(self.topMenu)
self.topMenu.add_cascade(label=key, menu=menu)
for value in items[key]:
menu.add_radiobutton(label=value, variable = self.the_value, value=value)
self.menubutton.pack()
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
+0
啊,所以你可以在任何地方放置菜單,例如'Menubutton'。謝謝! – Adam
1
對上述代碼的改進以支持更長的菜單。享受遞歸。
import Tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
def create_menu(top_info, top_menu, value_var):
if isinstance(top_info, dict):
print "Evaluating dictionary with keys:"
for key in top_info.keys():
print 'Key:' + key
menu = tk.Menu(top_menu)
top_menu.add_cascade(label=key, menu=menu)
create_menu(top_info[key], menu, value_var)
return
else:
print "Evaluating list of values:"
for value in top_info:
print 'Value:' + value
top_menu.add_radiobutton(label=value, variable = value_var, value=value)
return
tk.Frame.__init__(self, parent)
items = {"one": {"a":["aa","aaa","aaaa"],"b":["bb","bb"],"c":["cc"] },
"two": ["d","e","f"],
"three": ["g","h","i"]}
self.the_value = tk.StringVar()
self.the_value.set("a")
self.menubutton = tk.Menubutton(self, textvariable=self.the_value, indicatoron=True)
self.topMenu = tk.Menu(self.menubutton, tearoff=False)
self.menubutton.configure(menu=self.topMenu)
create_menu(items, self.topMenu, self.the_value)
self.menubutton.pack()
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
相關問題
- 1. 的Tkinter OptionMenu小部件不顯示值
- 2. 基於OptionMenu值的Tkinter pack條目小部件,pack_forget否
- 3. 檢查tkinter小部件是否可見
- 4. 是否可以嵌套部分視圖?
- 5. 是否可以嵌套ko.utils.arrayFilter?
- 6. 是否可以嵌套preg_match?
- 7. 是否可以在Tkinter中獲取小部件設置?
- 8. 是否可以在Tkinter中按名稱搜索小部件?
- 9. 上連接兩個OptionMenu部件的Tkinter
- 10. 使用tkinter中的optionmenu小部件的錯誤
- 11. Python tkinter:排序OptionMenu小部件的內容
- 12. 是否有任何方法可以獲取相對於Tkinter中整個屏幕的小部件位置?
- 13. 是否可以嵌套門套?
- 14. 檢查小部件是否存在(Tkinter)
- 15. Tkinter小部件佈局是否錯誤?
- 16. 如何將tkinter OptionMenu&Entry小部件的內容保存到文件中?
- 17. Tkinter OptionMenu參數
- 18. 如何更改Tkinter的OptionMenu小部件的菜單背景顏色?
- 19. 如何爲tkinter中的OptionMenu小部件指定「highlightbackground」之類的屬性?
- 20. 如何更改或刪除Tkinter的OptionMenu小部件的子菜單邊界?
- 21. 是否可以有條件地允許嵌套屬性?
- 22. 是否有任何設計模式可以避免嵌套開關情況?
- 23. 是否可以在Tkinter中同時複製多個小部件的內容?
- 24. 是否可以在redux中嵌套reducer?
- 25. 是否可以嵌套索引匹配?
- 26. 是否可以嵌套JavaScript對象?
- 27. 是否可以在Redis中嵌套GET?
- 28. 是否可以嵌套清單?
- 29. 是否可以嵌套數組json?
- 30. 是否可以綁定嵌套泛型?
也許[pwm](http://pmw.sourceforge.net/)有一些對你有用的東西。 – Marcin