从动态填充的组合框中返回选定值作为全局变量?
Returning a selected value from a dynamically populated combobox as a global variable?
我正在尝试自动化一些工作来处理从 SQL 引入的数据。在我的完整代码开始时,我从网站的其他地方找到并修改了下面的 class 以充当流畅的界面,以便其他人也可以使用该代码。
这样做的目的是从选项中检索所需的 'MPAN' 和年份。组合框完全按照我的意愿填充,但是当尝试将所选值作为全局变量检索并在单击 'Submit' 时关闭 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()
这是我第一次在该网站上发帖,如果有遗漏任何细节,我深表歉意。我见过类似的问题,但 none 有针对这种情况的解决方案。
找出我哪里出错了。
需要将按钮放入 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()
我正在尝试自动化一些工作来处理从 SQL 引入的数据。在我的完整代码开始时,我从网站的其他地方找到并修改了下面的 class 以充当流畅的界面,以便其他人也可以使用该代码。
这样做的目的是从选项中检索所需的 'MPAN' 和年份。组合框完全按照我的意愿填充,但是当尝试将所选值作为全局变量检索并在单击 'Submit' 时关闭 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()
这是我第一次在该网站上发帖,如果有遗漏任何细节,我深表歉意。我见过类似的问题,但 none 有针对这种情况的解决方案。
找出我哪里出错了。
需要将按钮放入 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()