如何获取Python3 Tkinter中函数内部的变量?
如何获取Tkinter事件绑定函数中的局部变量
你的代码里直接写thing = user_get会触发NameError,原因有两个:
user_get是entered函数内部的局部变量,外部代码无法直接访问;- 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
相关产品推荐
相关产品推荐

