我正在用Python编写一段代码,使用tkinter从组合框中获取一个值,然后在按钮的点击事件中使用这个值。但是当我运行这个代码时,我得到了这个错误
"NameError:名称"event"未定义">
我的代码就像这个
from tkinter import *
from tkinter.ttk import *
from matplotlib.font_manager import FontProperties
font = FontProperties()
font.set_family('serif')
font.set_name('Times New Roman')
font.set_style('normal')
window = Tk()
window.title("CCE Tool")
tab_control = Notebook(window)
tab1 = Frame(tab_control)
tab2 = Frame(tab_control)
tab_control.add(tab1, text='Regional')
tab_control.add(tab2, text='Plot')
Filee_Tab1=Entry(tab1 ,width=70 , text='Enter adress of database')
Filee_Tab1.grid(column=1, row=0)
lbl1_Tab1 = Label(tab1, text= 'Input data address')
lbl1_Tab1.grid(column=0, row=0)
def combo3_Tab1_click(event):
global X # Setting select_sheet to global, so it can be modified
X = combo3_Tab1.get()
return X
def clicked_btn2_Tab1():
X = combo3_Tab1_click(event)
return 0
combo3_Tab1 = Combobox(tab1, state="readonly")
# combo3_Tab1.current(1)
combo3_Tab1['values']= ["1","2","3"]
combo3_Tab1.grid(column=1, row=4)
combo3_Tab1.bind("<<ComboboxSelected>>", combo3_Tab1_click)
btn2_Tab1 = Button(tab1,text='Run CNN', command=clicked_btn2_Tab1)
btn2_Tab1.grid(column=0,row=7)
tab_control.pack(expand=1, fill='both')
window.geometry('900x500')
window.mainloop()
如何修复此错误谢谢
您的btn2_Tab1
是用command=
参数定义的,该参数可以正确调用所需的函数。
为什么这个函数需要调用另一个bind()
(提供正确的event
(的目标函数?
只需复制粘贴功能内容:
def clicked_btn2_Tab1():
X = combo3_Tab1.get()
return 0
我用以下命令修复了它:
from tkinter import *
from tkinter.ttk import *
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from scipy.stats.kde import gaussian_kde
from scipy.stats import norm
font = FontProperties()
font.set_family('serif')
font.set_name('Times New Roman')
font.set_style('normal')
window = Tk()
window.title("CCE Tool")
tab_control = Notebook(window)
tab1 = Frame(tab_control)
tab2 = Frame(tab_control)
tab_control.add(tab1, text='Regional')
tab_control.add(tab2, text='Plot')
Filee_Tab1=Entry(tab1 ,width=70 , text='Enter adress of database')
Filee_Tab1.grid(column=1, row=0)
lbl1_Tab1 = Label(tab1, text= 'Input data address')
lbl1_Tab1.grid(column=0, row=0)
def combo3_Tab1_click(event):
global X # Setting select_sheet to global, so it can be modified
X = combo3_Tab1.get()
return X
def clicked_btn2_Tab1(event):
X = combo3_Tab1_click(event)
print("OK")
return 0
combo3_Tab1 = Combobox(tab1, state="readonly")
# combo3_Tab1.current(1)
combo3_Tab1['values']= ["1","2","3"]
combo3_Tab1.grid(column=1, row=4)
combo3_Tab1.bind("<<ComboboxSelected>>", combo3_Tab1_click)
btn2_Tab1 = Button(tab1,text='Run CNN')
btn2_Tab1.grid(column=0,row=7)
btn2_Tab1.bind("<Button-1>", clicked_btn2_Tab1)
tab_control.pack(expand=1, fill='both')
window.geometry('900x500')
window.mainloop()
问题是,您创建了一个函数,希望它可以从正在处理的事件和代码中的其他位置调用。当您使用bind
时,函数会自动获得一个参数,我们通常将其命名为event
。但是,当您通过command
属性调用函数时,您不会得到此参数。
在您的情况下,最简单的解决方案是只传递None
作为事件参数,因为函数不使用它
def clicked_btn2_Tab1():
X = combo3_Tab1_click(event=None)
return 0
另一个解决方案是使event
参数可选,这样您就可以直接调用它而不需要参数:
def combo3_Tab1_click(event=None):
...