2011-09-12 1 views
1

내 문제는 다음과 같습니다. 파일이 여러 개 있고 이름이있는 드롭 다운 메뉴를 만들었습니다. 다음으로 필요한 것은 파일 이름을 선택하여 특정 데이터를 표시 할 때마다 변경할 수있는 옵션 메뉴입니다. 파일을 옵션으로. 분명히, 내 질문에 대한 옵션 메뉴를 변경하는 방법에 대해서만 드롭 다운 선택에서 선택됩니다. 어떤 도움을 주셔서 감사합니다.드롭 다운 메뉴의 선택 사항에 따라 tkinter에서 옵션 위젯을 동적으로 채울 수 있습니까?

답변

8

OptionMenu 위젯은 메뉴와 관련된 메뉴 버튼을 만드는 편리한 클래스입니다. 이 메뉴는 "menu" 속성을 통해 얻을 수 있습니다. 유일한 트릭은 메뉴 항목이 무엇을해야 하는지를 아는 것입니다. 이것은 관련된 변수의 값을 설정하는 것 이상입니다. OptionMenu이 명령 옵션을 제공로서 나는이 방법을 이미 (있는 경우) 주어진 명령에 대한 참조를 유지하고 새로운 옵션에 전달하기 위해 제안,

import Tkinter as tk 

class SampleApp(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     self.om_variable = tk.StringVar(self) 

     b1 = tk.Button(self, text="Colors", width=8, command=self.use_colors) 
     b2 = tk.Button(self, text="Sizes", width=8, command=self.use_sizes) 

     self.om = tk.OptionMenu(self, self.om_variable,()) 
     self.om.configure(width=20) 
     self.use_colors() 

     b1.pack(side="left") 
     b2.pack(side="left") 
     self.om.pack(side="left", fill="x", expand=True) 


    def _reset_option_menu(self, options, index=None): 
     '''reset the values in the option menu 

     if index is given, set the value of the menu to 
     the option at the given index 
     ''' 
     menu = self.om["menu"] 
     menu.delete(0, "end") 
     for string in options: 
      menu.add_command(label=string, 
          command=lambda value=string: 
            self.om_variable.set(value)) 
     if index is not None: 
      self.om_variable.set(options[index]) 

    def use_colors(self): 
     '''Switch the option menu to display colors''' 
     self._reset_option_menu(["red","orange","green","blue"], 0) 

    def use_sizes(self): 
     '''Switch the option menu to display sizes''' 
     self._reset_option_menu(["x-small", "small", "medium", "large"], 0) 

if __name__ == "__main__": 
    app = SampleApp() 
    app.mainloop() 
+0

매우 유용한 설명과 매우 유용합니다. 감사합니다. – GiannisIordanou

+0

그럼, 이미 인스턴스화 된 메뉴에 메뉴 항목을 동적으로 추가하여 새 항목을 만들 수 있기 전에 메뉴 항목을 삭제해야한다는 말입니까? – Shule

+2

@ user2962794 : 아니, 그건 내가 말하는 말은 아니야. 거기에있는 항목을 삭제할 필요는 없습니다. 그 중심에 그냥 메뉴이고, 당신은 모든 메뉴 방법에 대한 전체 액세스 권한이 있습니다. 새 항목을 삽입하고 기존 항목을 삭제하거나 수정할 수 있습니다. –

-1

: 여기

은 예입니다

이전의 대답은 정말 브라이언 Oakl에 의해 주어진 답을 유용 Btw는 어떤 사용 의

def __init__(self, *args, **kwargs): 
    ... 
    self.command=kwargs['command'] 
    ... 

def _reset_option_menu(options, index=None): 
    ... 
    menu.add_command(label=string, 
        command=lambda:self.command(), 
        value=self.om_variable.set(string))       
     ... 

희망의 기반으로

attendion 변수 ey,

관련 문제