名称错误:名称'event'未在 Tkinter 中定义



我正在用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):
...

相关内容

  • 没有找到相关文章

最新更新