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

为何在两个Python3脚本间传递tkinter Entry值时得到'!entry'而非实际值?

跨脚本传递tkinter Entry取值返回!entry问题排查

复现代码

  • 主运行脚本:
from tkinter import *
w=Tk()
def send(e):
    import snd
e=Entry(w)
e.pack()
b=Button(w,command=lambda:send(e.get()))
b.pack()
w.mainloop()
  • 同目录下snd.py脚本:
from __main__ import *
print(e)

问题根因

  • 按钮回调中虽然调用了e.get()拿到输入框实际值,也把值传给了send函数,但send函数接收参数后没有做任何传递处理,直接导入snd模块
  • snd模块里from __main__ import *导入的是主程序命名空间下的Entry组件对象本身,不是get()返回的输入字符串
  • tkinter组件默认的字符串转换结果是Tk内部为组件分配的路径标识,你创建的第一个Entry组件的默认标识就是!entry,所以打印时输出的是这个内部标识,而非用户输入内容
  • 额外隐藏问题:Python模块导入有缓存机制,第一次点击按钮导入snd后,后续点击不会重新执行snd中的打印逻辑

正确写法

不要用from __main__ import *的方式跨脚本隐式共享变量,显式传递参数即可:

  • 修改后主脚本:
from tkinter import *
w=Tk()
def send(input_value):
    import snd
    # 显式将输入值传给snd模块的处理函数
    snd.process_input(input_value)
e=Entry(w)
e.pack()
b=Button(w,command=lambda:send(e.get()))
b.pack()
w.mainloop()
  • 修改后snd.py:
def process_input(val):
    # 此处val即为用户在输入框中填写的实际内容
    print("获取到的输入内容:", val)

注意:如果业务逻辑确实需要在其他脚本中访问Entry组件对象,也请通过函数参数显式传递,避免隐式导入带来的命名空间污染、导入时序报错等问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:45:48