Меню параметров tkinter отсутствует

Почему следующий код из my in initUI, метод, вызываемый __ init __, не добавляет в окно меню параметров? Я думал, что этот код создаст окно с OptionMenu в нем.

game_menu_var = tk.IntVar()
game_menu_var.set(1)
self.game_menu = tk.OptionMenu(self, game_menu_var, 1, 2 , 3)
self.game_menu.pack(side="left")

полный код:

'''
A GUI for wm
'''

import tkinter as tk
import _wm

class WMGUI(tk.Frame):
    '''
    A GUI for wm
    '''
    def __init__(self, parent=None, *, title='WM'):
        if parent is None:
            parent = tk.Tk()
        tk.Frame.__init__(self, parent)
        self.parent = parent
        self.initUI(title)

    def initUI(self, title):
        """
        do not call from outside of class
        """
        self.parent.title(title)
        # make game_menu
        game_menu_var = tk.IntVar()
        game_menu_var.set(1)
        self.game_menu = tk.OptionMenu(self, game_menu_var, 1, 2 , 3)
        self.game_menu.pack(side="left")

person user3448301    schedule 21.03.2014    source источник


Ответы (1)


Вам нужно использовать метод pack() для вашего Frame в init, иначе аргумент self в вашем OptionMenu не будет ссылаться на существующий Frame.

Попробуй это:

class WMGUI(tk.Frame):
    '''
    A GUI for wm
    '''
    def __init__(self, parent=None, *, title='WM'):
        if parent is None:
            parent = tk.Tk()
        tk.Frame.__init__(self, parent)
        self.parent = parent
        self.pack() #packs the Frame
        self.initUI(title)

    def initUI(self, title):
        """
        do not call from outside of class
        """
        self.parent.title(title)
        # make game_menu
        game_menu_var = tk.IntVar()
        game_menu_var.set(1)
        self.game_menu = tk.OptionMenu(self, game_menu_var, 1, 2 , 3)
        self.game_menu.pack(side="left")

Альтернативно, родительским виджетом является self.parent, так что вы можете сделать его главным для self.game_menu:

 self.game_menu = tk.OptionMenu(self.parent, game_menu_var, 1, 2 , 3)
person atlasologist    schedule 21.03.2014
comment
Ваша терминология немного неверна - рамка существует, просто ее не видно. - person Bryan Oakley; 22.03.2014
comment
Звучит как экзистенциальный спор, Брайан. ;) - person atlasologist; 22.03.2014