You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:05:30