2016-10-23 14 views
0

コマンドフラグを使用せずにOptionMenuオブジェクトにオプションを追加する方法はありますか?Tkinterでadd_command関数を使わずにOptionMenuでオプションを追加するには?

this oneのように、add_commandが既存のOptionMenuオブジェクトにオプションをどのように更新/削除/追加するかを示す記事が多数あります。たとえば、次のコードスニペットはserialPortOptionMenuのすべてのオプションを削除し、異なるオプションでオプションメニューを再移入:

serialPortOptionMenu["menu"].delete(0, "end") 
for serialPort in serialPortsArray: 
    serialPortOptionMenu["menu"].add_command(label=serialPort[1], command=lambda v=serialPort: serialPortFunc(v)) 

しかし、このようなものは、オプションメニューのオブジェクトを作成するときに、私が書いたオリジナルのコマンドフラグを上書きするようだ:

serialPortOptionMenuValue = Tkinter.StringVar(optionMenuFrame) 
serialPortOptionMenuValue.set(serialPorts[0]) 
serialPortOptionMenu = Tkinter.OptionMenu(optionMenuFrame, serialPortOptionMenuValue, *serialPorts, command=lambda *args: callbackFuncWhenOptionMenuSelectsAnotherOption(*args)) 
serialPortOptionMenu.grid(row=3, column=0, columnspan=2, sticky="we") 

多くの人が私がOptionMenu(なぜ私が知っている奇妙なもの)の中でコマンドを設定しているのだろうと思っているのは、ユーザーが新しいオプションを選択したときにコールバック関数を呼び出されたいからです。

"トレースオプションはどうですか?" - 皆...はい、私もこれを認識していますが、OptionMenuを単独で変更せずにコード内のTkinter変数に新しい値を読み書きしているためTkinter内のトレースは、OptionMenuで新しいオプションを選択したときに追跡するだけの有効な代替手段ではありません。

なぜTkinterの値を変更して、OptionMenuを持たないのですか? Tkinterの値の文字列を、文字列の最後にある〜のようなもので修正して、まだ完成していない場面で何かが起こっていることを知っていいと思ったので、完成したときだけ〜が消えます。 OptionMenuを使用せずに値を読み書きするだけで値が変更されます。誰もが、それは私の元のコールバック関数を削除しているようだとして

myMenu["menu"].add_command(..., command=...) 

を使用せずにオプションメニューオブジェクトにオプションを追加する他の方法を知っていれば私は主に興味を持って何

です。

注:OptionMenusを2つ持っていて、それらを非表示にするためにgrid_remove/gridを実行しても、私の頭をはがしましたが、ちょっと混乱しているようです。

答えて

1

他の方法はありません。オプションメニューは、メニューボタンとカスタムバインディングを持つメニューにすぎません。独自のOptionMenuを作成し、必要なメソッドを追加することができます。

+0

ttk.Notebookを使用してタブを作成することを除いて、私はめったにttkを直接使用しません。簡単にMenubuttonを[ここ](http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-Menubutton.html)から作成しました。インスタンス化された(親、オプションなど)のTkinter.OptionMenuに似ているようです。簡単な例を書いたり、私がやろうとしていることを達成するための良いリソースに向けて私を指差すことができると思いますか? – AustinTronics

関連する問題