我正在使用 tkinter 做一個專案,我偶然發現了這個問題。當我在單擊條目小部件時嘗試呼叫系結函式以打開我的數字鍵盤時,出現此錯誤。
Traceback (most recent call last):
File "test.py", line 40, in <module>
app = Main()
File "test.py", line 15, in __init__
self.main_frame()
File "test.py", line 28, in main_frame
eF.bind("<1>", open_numeric_keyboard(0)) #open numeric for feedrate
NameError: name 'open_numeric_keyboard' is not defined
即使我嘗試呼叫不同的函式或從庫中呼叫一些函式,我也有同樣的問題。其余的代碼作業得很好,所以這里是主代碼的一個捷徑,其中包含導致問題的部分。
from tkinter import *
class Main:
def __init__(self):
self.entry_widget = 0
self.root = Tk()
self.root.resizable(width=False, height=False)
self.root.geometry("800x480")
self.width = 480
self.height = 480
self.main_frame()
def main_frame(self):
self.f_main = Frame(self.root, height = 480, width = 320, borderwidth = 1, highlightbackground="red",highlightthickness=1)
self.f_main.place(x=480, y=0)
eF = Entry(self.f_main, relief = "groove")
eMM = Entry(self.f_main, relief = "groove")
eF.place(x = 70, y = 127, height = 40, width = 60)
eMM.place(x = 70, y = 166, height = 40, width = 60)
eF.bind("<1>", open_numeric_keyboard(0)) #open numeric for feedrate
eMM.bind("<1>", open_numeric_keyboard(1)) #open numeric for MM
def open_numeric_keyboard(self, entry):
self.numeric_frame.tkraise()
if entry == 0: #F
self.entry_widget = 0
elif entry == 1: #MM
self.entry_widget = 1
app = Main()
uj5u.com熱心網友回復:
它self.open_numeric_keyboard,就像你已經做self.main_frame()(這應該被命名例如create_self_frame,如果你問我)。
然后,您需要將函式包裝在 lambda 中,這樣它就不會立即被呼叫:
eF.bind("<1>", lambda *_args: self.open_numeric_keyboard(0))
eMM.bind("<1>", lambda *_args: self.open_numeric_keyboard(1))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335949.html
