[英]How align Optionmenu using grid in centre of window in tkinter?
我試圖將Optionmenu居中並排對齊,但是每當取消注釋.grid()
語句時,窗口中都不會顯示任何內容,它會變成空白。
import tkinter as tk
from utils import editionMap, topicMap, langMap
class OptionMenu(tk.Frame):
def __init__(self, master, status, *options):
self.frame = tk.Frame(master)
self.frame.pack()
self.status = tk.StringVar()
self.status.set(status)
self.dropdown = tk.OptionMenu(self.frame, self.status, *options)
self.dropdown.pack()
def main():
root = tk.Tk()
Edition_Filter = OptionMenu(root, "Edition", *editionMap.keys())
#Edition_Filter.grid(row=0, column=0) <---Uncomment
Language_Filter = OptionMenu(root, "Language", *langMap.keys())
#Language_Filter.grid(row=0, column=1) <---Uncomment
Topic_Filter = OptionMenu(root, "Topic", *topicMap.keys())
#Topic_Filter.grid(row=0, column=2) <---Uncomment
root.mainloop()
if __name__ == '__main__':
main()
我希望將顯示選項菜單作為“編輯Edition Language Topic
水平並排顯示。
我的實際輸出是:
您混合了兩種不同的技術
第一:繼承
class OptionMenu(tk.Frame): # <-- with Frame
def __init__(self, master, status, *options):
super().__init__(master) # <-- with super()
第二:包括
class OptionMenu(): # <-- without Frame
def __init__(self, master, status, *options):
self.frame = tk.Frame(master) # <-- create inner widget
首先創建可以使用menu.pack()
或menu.grid()
真實小部件
第二個不創建窗口小部件-它創建內部帶有窗口小部件的普通類,您必須使用menu.frame.pack()
或menu.frame.grid()
真實小部件的示例
import tkinter as tk
class OptionMenu(tk.Frame): # <-- with Frame
def __init__(self, master, status, *options):
super().__init__(master) # <-- with super()
self.status = tk.StringVar()
self.status.set(status)
# use `self` as parent for widgets inside
self.dropdown = tk.OptionMenu(self, self.status, *options)
self.dropdown.pack()
def main():
editionMap = {1:"English", 2:"German", 3:"Russian"}
langMap = {1:"English", 2:"German", 3:"Russian"}
topicMap = {1:"English", 2:"German", 3:"Russian"}
root = tk.Tk()
Edition_Filter = OptionMenu(root, "Edition", *editionMap.keys())
Edition_Filter.grid(row=0, column=0)
Language_Filter = OptionMenu(root, "Language", *langMap.keys())
Language_Filter.grid(row=0, column=1)
Topic_Filter = OptionMenu(root, "Topic", *topicMap.keys())
Topic_Filter.grid(row=0, column=2)
root.mainloop()
if __name__ == '__main__':
main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.