2017-06-22 5 views
0

私は対象が新しくないと知っていますが、辞書でそれを使用する方法を見つけることができませんでした!dtとのttk.Comboboxのデフォルト値

ComboBoxで選択せずに電話をかけると、NameErrorが発生するという問題があります。私は関数 "cbx_fatura_arama"にあるので "try、except"はできないと思います。ここ

は私のコードです:

from tkinter import * 
from tkinter import ttk 

LframeAra = Tk() 

class NewCBox(ttk.Combobox): 
    def __init__(self, master, dictionary, *args, **kw): 
     ttk.Combobox.__init__(self, master, values = sorted(list(dictionary.keys())), state = 'readonly', *args, **kw) 

     self.dictionary = dictionary 
     self.bind('<<ComboboxSelected>>', self.selected) #purely for testing purposes 

    def value(self): 
     return self.dictionary[self.get()] 

    def selected(self, event): #Just to test 
     global cbx_fatura_arama 
     cbx_fatura_arama = self.value() 


lookup = {'Firma' : 'firma', 'Fatura No' : 'fatura_no', 'Ürün Türü' : 'urun_turu', 'Model No' : 'model_no'} 
newcb = NewCBox(LframeAra, lookup) 
newcb.grid(row=1, column=7, padx=4, pady=4, sticky='we') 

ara_ft = ttk.Entry(LframeAra) 
ara_ft.grid(row=1, column=8, padx=4, pady=4, sticky='we') 

ara_ft_button = ttk.Button(LframeAra, text="Ara", command=lambda : fatura_ara(cbx_fatura_arama, ara_ft)) 
ara_ft_button.grid(row=1, column=9, padx=4, pady=4, sticky='we') 

def fatura_ara(search, find): 
    print("Some codes.........", search, find.get()) 
mainloop() 

私は必要なものの選択を作るの過ちを犯してからコンボボックスを防ぐためです。または、デフォルトの選択をすることができます。

これを行う方法を教えてください。 ありがとうございます。

答えて

2

これは、グローバル変数を初期化していないためです。あなたはなぜグローバル変数を使用していますか?すべての変更で変数を更新するのではなく、必要に応じて値を取得するほうがずっと良いでしょう。例えば:

from tkinter import * 
from tkinter import ttk 

LframeAra = Tk() 

class NewCBox(ttk.Combobox): 
    def __init__(self, master, dictionary, *args, **kw): 
     ttk.Combobox.__init__(self, master, values = sorted(list(dictionary.keys())), state = 'readonly', *args, **kw) 
     self.current(0) # select the first option 
     self.dictionary = dictionary 

    def get(self): 
     return self.dictionary[super().get()] 

def fatura_ara(): 
    print("Some codes.........", newcb.get(), ara_ft.get()) 

lookup = {'Firma' : 'firma', 'Fatura No' : 'fatura_no', 'Ürün Türü' : 'urun_turu', 'Model No' : 'model_no'} 
newcb = NewCBox(LframeAra, lookup) 
newcb.grid(row=1, column=7, padx=4, pady=4, sticky='we') 

ara_ft = ttk.Entry(LframeAra) 
ara_ft.grid(row=1, column=8, padx=4, pady=4, sticky='we') 

ara_ft_button = ttk.Button(LframeAra, text="Ara", command=fatura_ara) 
ara_ft_button.grid(row=1, column=9, padx=4, pady=4, sticky='we') 

mainloop() 
関連する問題