2014-03-21 3 views
1

에있는 다음 코드를 __ init __이라는 메소드가 호출하여 Option 메뉴를 추가하지 않는 이유는 무엇입니까? 나는이 코드가 OptionMenu 인 윈도우를 만들 것이라고 생각했다.tkinter 옵션 메뉴가 누락되었습니다.

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") 

전체 코드는 :

당신은 당신의 Frame 의 초기화pack() 방법을 사용할 필요가
''' 
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") 

답변

1

, 그렇지 않으면 OptionMenu 내에서 인수 self 기존 Frame를 참조하지 않습니다.

이 시도 : 당신이 self.game_menu의 마스터가 있음을 만들 수 있도록

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 = tk.OptionMenu(self.parent, game_menu_var, 1, 2 , 3) 
+0

귀하의 용어가 조금 떨어져입니다 - 프레임을 존재한다, 그것은 단지 보이지 않는다. –

+0

실용적인 주장 인 Bryan처럼 들립니다. ;) – atlasologist

관련 문제