簡體   English   中英

帶有dic的ttk.Combobox的默認值

[英]default value for ttk.Combobox with dic

我知道這不是一個新主題,但是我找不到在字典中使用它的方法!

問題是,如果我未在ComboBox中進行選擇就撥打電話,則會出現NameError。 我猜我不能做“嘗試,除了”,因為它在函數“ cbx_fatura_arama”中。

這是我的代碼:

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

我需要防止ComboBox在選擇中犯錯誤。 或可以做出默認選擇。

您能建議一種方法嗎? 提前致謝。

這是因為您沒有初始化全局變量。 為什么仍然使用全局變量? 最好根據需要簡單地獲取值,而不是每次更改都更新變量。 例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM