Tkinter获取Entry输入失败求助:无法从自定义函数获取输入值
解决Tkinter自定义函数无法获取Entry输入值的问题
你的代码核心问题是:e1和newWindow是Window_2函数内的局部变量,verifCode函数处于不同作用域,无法直接访问这两个变量,运行时会触发NameError。
以下是三种可行的解决方法:
方法一:使用全局变量
在Window_2函数内声明变量为全局变量,让verifCode可以访问:
from tkinter import * root = Tk() root.title("Blumpy") root.geometry("420x280") l1 = Label(root, text="Blumpy",font="Impact", bg="Blue") l1.pack() def Window_2(): # 声明为全局变量 global newWindow, e1 newWindow = Toplevel() newWindow.title("Connect to Blumpy") l2 = Label(newWindow, text="Connect to Blumpy",font="Impact", bg="Blue") l2.pack() e1 = Entry(newWindow) e1.pack() b2 = Button(newWindow, text="Connect",command=verifCode) b2.pack() def verifCode(): getCode = e1.get() if getCode == "d2c4r13G3T8LUM9Y" : newWindow.destroy() b1 = Button(root, text="Connect", command=Window_2) b1.pack() root.mainloop()
方法二:嵌套函数
将verifCode嵌套在Window_2内部,直接访问外层函数的局部变量,作用域更清晰:
from tkinter import * root = Tk() root.title("Blumpy") root.geometry("420x280") l1 = Label(root, text="Blumpy",font="Impact", bg="Blue") l1.pack() def Window_2(): newWindow = Toplevel() newWindow.title("Connect to Blumpy") l2 = Label(newWindow, text="Connect to Blumpy",font="Impact", bg="Blue") l2.pack() e1 = Entry(newWindow) e1.pack() # 嵌套函数直接访问外层变量 def verifCode(): getCode = e1.get() if getCode == "d2c4r13G3T8LUM9Y" : newWindow.destroy() b2 = Button(newWindow, text="Connect",command=verifCode) b2.pack() b1 = Button(root, text="Connect", command=Window_2) b1.pack() root.mainloop()
方法三:使用类管理(推荐复杂GUI)
通过类将组件和方法封装,便于维护和扩展:
from tkinter import * class BlumpyApp: def __init__(self, root): self.root = root self.root.title("Blumpy") self.root.geometry("420x280") l1 = Label(root, text="Blumpy",font="Impact", bg="Blue") l1.pack() b1 = Button(root, text="Connect", command=self.window_2) b1.pack() def window_2(self): self.new_window = Toplevel() self.new_window.title("Connect to Blumpy") l2 = Label(self.new_window, text="Connect to Blumpy",font="Impact", bg="Blue") l2.pack() self.e1 = Entry(self.new_window) self.e1.pack() b2 = Button(self.new_window, text="Connect", command=self.verif_code) b2.pack() def verif_code(self): get_code = self.e1.get() if get_code == "d2c4r13G3T8LUM9Y": self.new_window.destroy() if __name__ == "__main__": root = Tk() app = BlumpyApp(root) root.mainloop()
内容的提问来源于stack exchange,提问作者Sky Dev
相关产品推荐
相关产品推荐

