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

如何在点击按钮时获取tkinter Entry输入框的变量值供其他函数调用

Tkinter Entry输入值获取与后续调用实现方案

核心问题为执行时机错误:print(run(C)) 写在 win.mainloop() 之前,会在窗口启动、用户进行任何操作前就执行完成,此时用户还未输入内容、点击Submit按钮,全局变量C仍为初始空值,自然无法拿到输入结果。
另外Tkinter的按钮command回调的返回值会被框架直接丢弃,因此在button函数中return A不会被外层逻辑接收,无实际作用。


修复方案1:将依赖输入的逻辑放入按钮回调

直接把需要用到用户输入值的逻辑放到button函数内,用户点击按钮时输入值已经获取完成,此时执行后续逻辑即可。

import tkinter as tk

win = tk.Tk()
canvas1 = tk.Canvas(win, width = 800, height = 700,  relief = 'raised')
canvas1.pack()

B = tk.StringVar()
C = ""

def run(input_str):
    D = input_str + 's'
    return D

def button():
    global C
    # 获取输入框内容
    input_val = B.get()
    C = input_val
    # 在此处调用所有依赖输入值的后续逻辑
    result = run(C)
    print(result)
    # 其他需要用到输入值的函数也可以在这里调用,例如:
    # other_func(C)


e = tk.Entry(win, textvariable = B)
canvas1.create_window(310, 65, window=e)

Submit = tk.Button(win, text = "Submit", command = button)
canvas1.create_window(700, 250, window=Submit)

# 移除提前执行的print逻辑
win.mainloop()

修复方案2:类封装(推荐,避免全局变量)

如果应用逻辑比较复杂,推荐用类封装整个Tkinter应用,将输入值作为实例属性存储,所有方法都可以直接调用,不需要声明全局变量:

import tkinter as tk

class InputApp:
    def __init__(self, root):
        self.root = root
        self.canvas1 = tk.Canvas(root, width = 800, height = 700,  relief = 'raised')
        self.canvas1.pack()
        
        self.input_var = tk.StringVar()
        self.user_input = ""
        
        self.e = tk.Entry(root, textvariable = self.input_var)
        self.canvas1.create_window(310, 65, window=self.e)
        
        self.submit_btn = tk.Button(root, text = "Submit", command = self.button_callback)
        self.canvas1.create_window(700, 250, window=self.submit_btn)
    
    def run(self, input_str):
        return input_str + 's'
    
    def button_callback(self):
        self.user_input = self.input_var.get()
        # 执行后续逻辑
        result = self.run(self.user_input)
        print(result)
        # 其他实例方法可以直接读取self.user_input使用
        # self.other_func()

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:27:01