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

如何获取Python3 Tkinter中函数内部的变量?

如何获取Tkinter事件绑定函数中的局部变量

你的代码里直接写thing = user_get会触发NameError,原因有两个:

  1. user_get是entered函数内部的局部变量,外部代码无法直接访问;
  2. Tkinter事件绑定的函数,触发时的返回值不会自动传递给外部变量,所以单纯用return无法实现你的需求。

另外注意:你原函数里return user_get之后的user_input.widget.destroy()永远不会执行,因为return会直接终止函数运行,需要调整代码顺序。

下面给出两种可行的解决方案:


方案1:使用全局变量

把user_get声明为全局变量,在函数内部通过global关键字引用,这样函数内的赋值会同步到全局作用域:

import tkinter as tk
from tkinter import ttk

window = tk.Tk()
window.geometry('1920x1080')
window.configure(bg = 'blue')

# 定义全局变量
user_get = ""

def entered(user_input):
    global user_get  # 声明使用全局变量
    user_get = user_input.widget.get()
    user_input.widget.delete(0, 'end')
    print(user_get)
    user_input.widget.destroy()  # 移到return前,避免代码不执行

# 创建输入框
user_input = tk.Entry(window)
user_input.pack()
user_input.place(x = 100,y = 40)
user_input.bind("<Return>", entered) 

# 注意:直接在mainloop前打印会得到初始空值,需在事件触发后获取
# 新增按钮用于触发打印
def print_input():
    print(user_get)

tk.Button(window, text="打印输入值", command=print_input).place(x=100, y=80)

window.mainloop()

方案2:使用类封装(更推荐)

用类来管理界面元素和变量,避免全局变量的混乱,代码结构更清晰:

import tkinter as tk
from tkinter import ttk

class InputApp:
    def __init__(self, window):
        self.window = window
        self.window.geometry('1920x1080')
        self.window.configure(bg = 'blue')
        self.user_get = ""  # 类实例变量,全类可访问

        # 创建输入框
        self.user_input = tk.Entry(window)
        self.user_input.pack()
        self.user_input.place(x = 100,y = 40)
        self.user_input.bind("<Return>", self.entered)

        # 新增打印按钮
        tk.Button(window, text="打印输入值", command=self.print_input).place(x=100, y=80)

    def entered(self, user_input):
        self.user_get = user_input.widget.get()
        user_input.widget.delete(0, 'end')
        print(self.user_get)
        user_input.widget.destroy()

    def print_input(self):
        print(self.user_get)

if __name__ == "__main__":
    window = tk.Tk()
    app = InputApp(window)
    window.mainloop()

关键补充

你原代码中thing = user_get写在window.mainloop()之前,此时Tkinter事件循环还未启动,用户还没机会输入内容,就算能访问到user_get,它也只是初始空值。必须在事件触发后(比如用户按下回车)再去获取变量值,比如通过按钮触发打印,或者直接在entered函数内部处理获取到的值。

内容的提问来源于stack exchange,提问作者user21235294

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:27:24