2013-07-20 24 views
8

Bu çok basit olmalı, ancak doğru olması için gerçekten uğraşıyorum. Tek ihtiyacım olan seçim değişikliğinde bir değişkeni güncelleyen basit bir ttk ComboBox.Basit ttk ComboBox demosu

Aşağıdaki örnekte, her seferinde yeni bir seçim yapıldığında otomatik olarak güncellenecek value_of_combo değişken değerine ihtiyacım var.

from Tkinter import * 
import ttk 

class App: 

    value_of_combo = 'X' 


    def __init__(self, parent): 
     self.parent = parent 
     self.combo() 

    def combo(self): 
     self.box_value = StringVar() 
     self.box = ttk.Combobox(self.parent, textvariable=self.box_value) 
     self.box['values'] = ('X', 'Y', 'Z') 
     self.box.current(0) 
     self.box.grid(column=0, row=0) 

if __name__ == '__main__': 
    root = Tk() 
    app = App(root) 
    root.mainloop() 

cevap

13

Sadece Combobox Widget'a sanal olayı <<ComboboxSelected>> bağlamak: Eğer güncellendiğinde bir Değişken değerini almak gerekirse

daha genel durumda
class App: 
    def __init__(self, parent): 
     self.parent = parent 
     self.value_of_combo = 'X' 
     self.combo() 

    def newselection(self, event): 
     self.value_of_combo = self.box.get() 
     print(self.value_of_combo) 

    def combo(self): 
     self.box_value = StringVar() 
     self.box = ttk.Combobox(self.parent, textvariable=self.box_value) 
     self.box.bind("<<ComboboxSelected>>", self.newselection) 
     # ... 
3

, tavsiye edilmektedir Onlara inşa edilmiş olan izleme tesisini kullanmak.

var = StringVar() # create a var object 

# define the callback 
def tracer(name, idontknow, mode): 
    # I cannot find the arguments sent to the callback documented 
    # anywhere, or how to really use them. I simply ignore 
    # the arguments, and use the invocation of the callback 
    # as the only api to tracing 
    print var.get() 

var.trace('w', tracer) 
# 'w' in this case, is the 'mode', one of 'r' 
# for reading and 'w' for writing 

var.set('Foo') # manually update the var... 

# 'Foo' is printed