我正在使用 tkinter 在 Python 中撰寫代碼以從組合框中獲取值,之后我在按鈕的單擊事件中使用該值。但是當我運行這段代碼時,我得到了這個錯誤
“NameError:名稱‘事件’未定義”
我的代碼是這樣的
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()
我該如何解決這個錯誤謝謝
uj5u.com熱心網友回復:
您使用正確呼叫預期函式btn2_Tab1的引數定義。command=
為什么這個函式需要呼叫另一個作為 a 目標的函式bind()(它提供正確的event)?
只需復制并粘貼函式內容:
def clicked_btn2_Tab1():
X = combo3_Tab1.get()
return 0
uj5u.com熱心網友回復:
我已經使用以下命令修復了它:
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()
uj5u.com熱心網友回復:
問題是您已經創建了一個函式,您希望該函式既可以從正在處理的事件中呼叫,也可以從代碼中的其他位置呼叫。使用時bind,該函式會自動獲取我們通常命名的引數event。但是,當您通過command屬性呼叫函式時,您不會獲得此引數。
在您的情況下,最簡單的解決方案是僅None作為事件引數傳遞,因為該函式不使用它
def clicked_btn2_Tab1():
X = combo3_Tab1_click(event=None)
return 0
另一種解決方案是將event引數設為可選,這樣就可以不帶引數直接呼叫:
def combo3_Tab1_click(event=None):
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/431688.html
