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

如何在不同模块的Tkinter弹窗间传递并返回变量?

解决Tkinter多模块弹窗返回Entry内容的问题

核心问题

不同模块的全局变量相互独立,main_popups.py里的output_variable和main.py里的不是同一个变量,而且按钮回调函数的return没法直接把值传到主模块的调用逻辑里。

最简解决方案:让弹窗函数返回输入值

利用wait_window会阻塞到弹窗关闭的特性,等弹窗销毁后,让input_box函数返回用户输入的内容,主模块直接接收这个返回值就行。

修改后的代码

main.py

from tkinter import *
import main_popups as main_popups

def main_screen():
    screen = Tk()   
    main_btn = Button(screen, text="Press me", command=pressed)
    main_btn.pack()  

    screen.mainloop()

def pressed():
    # 接收弹窗返回的输入值
    output_variable = main_popups.input_box(screen)
    print(output_variable)

main_screen()

main_popups.py

def input_box(screen):
    input_box_screen = Toplevel(screen)
    output_variable = ""

    def btn_press():
        nonlocal output_variable
        output_variable = entry.get()
        input_box_screen.destroy()
        
    entry = Entry(input_box_screen)
    entry.pack()   
    btn = Button(input_box_screen, text="Confirm", command=btn_press)
    btn.pack()     
    
    screen.wait_window(input_box_screen)
    # 弹窗关闭后返回输入值
    return output_variable

关键改动说明

  • 删掉了没必要的全局变量,用nonlocal让嵌套的btn_press函数修改外部input_box函数里的output_variable(global会指向模块级全局变量,这里nonlocal更贴合场景)。
  • input_box函数末尾加了return output_variable,因为wait_window会等弹窗销毁后才继续执行,这时已经拿到了用户输入,直接返回就行。
  • 主模块的pressed函数接收返回值,就能正常获取弹窗输入的内容。

进阶方案:用类封装弹窗

如果弹窗逻辑复杂,把弹窗做成类,用实例属性存输入值,主模块创建实例后读取属性值更清晰:

main_popups.py

class InputPopup:
    def __init__(self, parent):
        self.parent = parent
        self.output_value = ""
        self.create_widgets()

    def create_widgets(self):
        self.popup = Toplevel(self.parent)
        self.entry = Entry(self.popup)
        self.entry.pack()
        btn = Button(self.popup, text="Confirm", command=self.on_confirm)
        btn.pack()
        self.parent.wait_window(self.popup)

    def on_confirm(self):
        self.output_value = self.entry.get()
        self.popup.destroy()

主模块调用

def pressed():
    popup = main_popups.InputPopup(screen)
    print(popup.output_value)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:41:17