2017-02-13 4 views
0

異なるバインドイベントをトリガするエントリを持つ複数のコンボボックスを作成したいとします。たとえば、 Combobox1 = {Mustang、Focus、Tesla}、mustangはmethod_mustangを実行するバインドを持ち、フォーカスはmethod_focusなどを実行するバインドを持ちます。作成されるすべてのメソッドは異なるイベントをトリガーします。Pythonの異なるメソッドをバインドするコンボボックスを作成する方法

それで、私は同じようなことをするトラック用の新しいコンボボックスを書くことができるようにしたい。リストされたアイテムでコンボボックスを作成することはできますが、別のアイテムにバインドする方法については固執しています。

助けてください。コード別の質問に投稿された使用

:(ラベルセクションの必要はありませんが、参考に何かを与えたいと思った)

import tkinter as tk 
from tkinter import ttk 

values = ['mustang', 'focus', 'tesla'] 
root = tk.Tk() 
labels = dict((value, tk.Label(root, text=value)) for value in values) 

def handler(event): 
    current = combobox.current() 
    if current != -1: 
     for label in labels.values(): 
      label.config(relief='flat') 
     value = values[current] 
     label = labels[value] 
     label.config(relief='raised') 

combobox = ttk.Combobox(root, values=values) 
combobox.bind('<<ComboboxSelected>>', handler) 
combobox.pack() 
for value in labels: 
    labels[value].pack() 

root.mainloop() 

答えて

1

は、単に機能

import tkinter as tk 
from tkinter import ttk 

values = ['mustang', 'focus', 'tesla'] 

def method_mustang(): 
    label.configure(text="mustang selected") 
def method_focus(): 
    label.configure(text="focus selected") 
def method_tesla(): 
    label.configure(text="tesla selected") 
def method_unknown(): 
    label.configure(text="unknown selected") 

def handler(event): 
    current = combobox.current() 
    value = values[current] 
    print("current:", current, "value:", value) 
    func_map = { 
     "mustang": method_mustang, 
     "focus": method_focus, 
     "tesla": method_tesla 
    } 
    func = func_map.get(value, method_unknown) 
    func() 

root = tk.Tk() 
combobox = ttk.Combobox(root, values=values) 
combobox.bind('<<ComboboxSelected>>', handler) 
label = ttk.Label(root, width=20) 
combobox.pack(side="top", anchor="w") 
label.pack(side="top", fill="x", pady=4) 

root.mainloop() 
に値をマップすることを単一の結合を作成します。
+0

ありがとう!正確に私が必要とした方向。 – bob

関連する問題