簡體   English   中英

從動態填充的組合框中返回選定的值作為全局變量?

[英]Returning a selected value from a dynamically populated combobox as a global variable?

我正在嘗試自動化一些工作來處理從 SQL 引入的數據。 在我的完整代碼開始時,我從網站的其他地方找到並更改了以下類,以充當流暢的界面,以便其他人也可以使用該代碼。

這樣做的目的是從選項中檢索所需的“MPAN”和年份。 組合框完全按照我的意願填充,但是當嘗試將選定的值檢索為全局變量時出現問題,並在單擊“提交”時關閉 GUI,因為它沒有任何反應並且未獲得值,但是有沒有錯誤產生。

我的假設是我在我的“getMPAN”函數上犯了一個錯誤,盡管我對這種級別的 tkinter 不是很有經驗,所以我會非常感激。 為簡單起見,我添加了類別字典作為模擬數據。

b2=[[2018],[2019],[2020],[2021],[2022],[2023],[2024],[2025]]
category = {'home': ['utilities','rent','cable'],
    'car': ['gas','oil','repairs'],
    'rv':['parks','maintenance','payment']}
params=''
mpan=''
year=''

class Application(Frame):

    def __init__(self, master=None, Frame=None):
        Frame.__init__(self, master)
        super(Application,self).__init__()
        self.grid(column = 5,row = 20,padx = 50,pady = 50)
        self.createWidgets()

    def getUpdateData(self,  event):
        self.AccountCombo['values'] = category[self.CategoryCombo.get()]
        self.AccountCombo.current(0)

    def createWidgets(self):
        tk.Label(text = 'Area Code:').grid(row = 2,column = 1,padx = 10)
        tk.Label(text = 'MPAN:').grid(row = 4,column = 1,padx = 10)
        tk.Label(text = 'Year:').grid(row = 6, column = 1, padx = 10)
        self.AccountCombo = ttk.Combobox( width = 15)
        self.AccountCombo.grid(row = 5,column = 1,pady = 25,padx = 10)

        self.CategoryCombo = ttk.Combobox(width = 15,  values = list(category.keys()))
        self.CategoryCombo.bind('<<ComboboxSelected>>', self.getUpdateData)
        self.CategoryCombo.grid(row = 3,column = 1,padx = 10,pady = 25)

        self.YearCombo = ttk.Combobox(width = 15, values = b2)
        self.YearCombo.grid(row = 7, column = 1, padx = 10, pady = 25)
        self.YearCombo.current(0)

    def getMPAN(self):
        mpan=self.AccountCombo.get()
        year=self.YearCombo.get()
        self.destroy()

        global params
        params=[mpan,year]

w=tk.Button(Application(), text='Submit', command=Application().getMPAN)
w.grid(row=8, column=1)

app = Application()
app.master.title('MPAN Selector')
app.mainloop()

這是我第一次在網站上發帖,所以如果我遺漏了任何細節,我深表歉意。 我見過類似的問題,但沒有針對這種情況的解決方案。

弄清楚我哪里出錯了。

需要將按鈕放入 createWidgets 函數中,以便從 ComboBox 正確獲取所選值。

至於使用按鈕命令關閉小部件,我只需要將以下行添加到init

self.master=master

然后在 getMPAN 函數中將 destroy 更改為:

self.master.destroy()

我確定這是相對草率的修復,但總的來說這是我的代碼:

b2=[[2018],[2019],[2020],[2021],[2022],[2023],[2024],[2025]]
category = {'home': ['utilities','rent','cable'],
    'car': ['gas','oil','repairs'],
    'rv':['parks','maintenance','payment']}
params=''
mpan=''
year=''

class Application(tk.Frame):

    def __init__(self, master=None, Frame=None):
        Frame.__init__(self, master)
        self.master=master
        super(Application,self).__init__()
        self.grid(column = 5,row = 20,padx = 50,pady = 50)
        self.createWidgets()

    def getUpdateData(self,  event):
        self.AccountCombo['values'] = category[self.CategoryCombo.get()]
        self.AccountCombo.current(0)

    def createWidgets(self):
        tk.Label(text = 'Area Code:').grid(row = 2,column = 1,padx = 10)
        tk.Label(text = 'MPAN:').grid(row = 4,column = 1,padx = 10)
        tk.Label(text = 'Year:').grid(row = 6, column = 1, padx = 10)
        self.AccountCombo = ttk.Combobox( width = 15)
        self.AccountCombo.grid(row = 5,column = 1,pady = 25,padx = 10)

        self.CategoryCombo = ttk.Combobox(width = 15,  values = list(category.keys()))
        self.CategoryCombo.bind('<<ComboboxSelected>>', self.getUpdateData)
        self.CategoryCombo.grid(row = 3,column = 1,padx = 10,pady = 25)

        self.YearCombo = ttk.Combobox(width = 15, values = b2)
        self.YearCombo.grid(row = 7, column = 1, padx = 10, pady = 25)
        self.YearCombo.current(0)

        button=ttk.Button(self, text='Submit', command=self.getMPAN)
        button.grid(row=9, column=1)

    def getMPAN(self):
        mpan=self.AccountCombo.get()
        year=self.YearCombo.get()
        self.master.destroy()

        global params
        params=[mpan,year]

w=tk.Button(Application(), text='Submit', command=Application().getMPAN)
w.grid(row=8, column=1)

app = Application()
app.master.title('MPAN Selector')
app.mainloop()

暫無
暫無

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

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