2011-09-12 3 views
1

私の問題は次のとおりです:私はいくつかのファイルを持っていて、名前のドロップダウンメニューを作った、次に必要なのは、ファイル名が選択されたときに変更できるオプションメニューです私の質問は、ドロップダウンからの選択が選択されたときにオプションメニューをどのように変更するかについてのみです。どんな助けでもありがとう。ドロップダウンメニューからの選択に応じて、tkinterのオプションウィジェットをどのように動的に埋め込むことができますか?

答えて

8

OptionMenuウィジェットは、メニューに関連付けられたメニューボタンを作成する便利なクラスです。このメニューは、"menu"属性で取得できます。唯一のやり方は、メニュー項目が何をすべきかを知ることです。これは関連する変数の値を設定することだけです。オプションメニューは、コマンドオプションを与えるように私はこの方法を既に(もしあれば)指定されたコマンドへの参照を保持し、新しいオプションにそれを渡すことを示唆している、

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

:ここ

は例です

attendion、前の回答に基づく変数がどの使用 の

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

希望のはところで、本当にブライアンOaklによって与えられた答えをUSEFULL ey、

関連する問題