【发布时间】:2021-03-04 12:03:34
【问题描述】:
我正在尝试学习 Python,但我一直很难理解以下问题:
我的目标是收集用户在组合框中选择的值。就在下面,我放了一个我正在组合的程序的 sn-p。然而,一个疑问出现了: 在PageOne Class-selected函数中,为什么代码“list_1.append(var.get())”有效,而代码“list_1 = (var.get())”无效???
另外,在这部分代码中,对 list_1 变量的任何操作也是不可用的,指出错误:UnboundLocalError: local variable 'list_1' referenced before assignment。
您能帮我更好地理解这个问题吗?
from tkinter import *
from tkinter import ttk
list_1 = []
class Validation_Tool(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
container = Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (PageOne, PageTwo):
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame("PageOne")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
def quit(self):
self.destroy()
class PageOne(Frame):
# Combobox event handler. ADDED
def selected(self, event, var):
# list_1=(var.get()) # DOES NOT WORK !!!!!!!!!!!!!!!!!
list_1.append(var.get()) # IT WORKS!!!!!!!!!!!!
def button(self, list_1):
print(list_1)
def __init__(self, parent, controller):
Frame.__init__(self, parent)
self.controller = controller
combobox_var = StringVar() # ADDED.
combobox = ttk.Combobox(self, values=list('abcde'),
textvar=combobox_var) # For each Combobox. ADDED.
combobox.grid(row=1, column=0)
combobox.bind('<<ComboboxSelected>>', # Bind event handler. ADDED.
lambda event, var=combobox_var: self.selected(event, var)) # ADDED.
quit_button = Button(self, text="Quit Program",
command=lambda: controller.quit())
next_button = Button(self, text='Show options', command= lambda: self.button(list_1))
quit_button.place(relx=0.98, rely=0.98, anchor=SE)
next_button.place(relx=0.76, rely=0.98, anchor=SE)
class PageTwo(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
self.controller = controller
if __name__ == "__main__":
root = Validation_Tool()
root.geometry('400x300+430+250')
root.title("Validation Tool")
root.mainloop()
【问题讨论】:
-
你到底想做什么?如果您尝试收集所有用户选择的选项并将它们打印在屏幕上,它可以工作。如果您试图让用户只选择 1 个选项,那么您为什么要使用
list_1的列表? -
此代码改编自想要收集选项列表的用户。我想做的是只收集一个值。在最终的形式中,我想要的只是收集用户选择的选项,并且该值将被操纵以形成在字典中搜索的键
标签: python tkinter combobox getvalue