如何将Tkinter输入值通过按钮传递至其他Python模块打印?
如何将Tkinter输入值传递到另一个模块并在该模块打印?
我来帮你搞定这个问题——你想要点击按钮时把Tkinter输入框的值传到othermodule.py里打印,而不是在ticket.py的exoutput函数里执行打印,对吧?之前的做法有个核心问题:你在othermodule.py导入ticket时就直接调用了value.get(),这时候Tkinter窗口还没完全启动,用户根本没机会输入内容,而且会导致ticket.py的代码重复执行(出现两个窗口)。我们来调整代码实现你的需求:
第一步:修改othermodule.py,创建专门的接收函数
把原来直接获取值的代码改成一个可以接收参数并打印的函数,这样我们就能在需要的时候(点击按钮时)主动把值传过去:
# othermodule.py def print_user_input(input_value): """接收从ticket.py传来的输入值并打印""" print(f"输入值已传递到othermodule,内容为:{input_value}")
第二步:修改ticket.py的exoutput函数,调用另一个模块的打印函数
在ticket.py里,我们只需要在点击按钮时获取输入值,然后调用othermodule里的打印函数即可,注意要避免循环导入(确保othermodule不要导入ticket):
# ticket.py from Tkinter import * import othermodule # 导入othermodule模块 window = Tk() window.title("Entry") frame = Frame(window) value = Entry(frame) def exoutput(): # 获取输入框的值 input_val = value.get() # 调用othermodule的打印函数,把值传过去 othermodule.print_user_input(input_val) btnStage = Button(frame, text='ACTION', command=exoutput) btnStage.pack(side=RIGHT, padx=2) value.pack(side=LEFT) frame.pack(padx=10, pady=10) window.resizable(0, 0) window.mainloop()
为什么之前的方法不行?
- 你之前在
othermodule.py导入ticket时就执行了ticket.value.get(),这时候ticket.py的mainloop还没运行,输入框里没有任何用户输入,而且会触发ticket.py的代码再次执行,导致弹出两个Tkinter窗口。 - 正确的做法是在用户触发动作(点击按钮)时才传递值,而不是在模块导入阶段就执行获取操作。
额外注意事项
- 确保两个文件在同一个目录下,这样Python才能正确导入
othermodule。 - 不要让
othermodule.py导入ticket.py,否则会出现循环导入错误。 - 如果之后需要在
othermodule里对输入值做更多处理(比如验证、存储),只需要扩展print_user_input函数即可。
内容的提问来源于stack exchange,提问作者Andrew Dunlop
相关产品推荐
相关产品推荐

