簡體   English   中英

如何在tkinter的窗口中心使用網格對齊Optionmenu?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM