如何在Tkinter中向其他文件传递整数输入?报错解决
问题原因
你碰到的NameError: name 'a' is not defined是因为function.py里直接用了home.py中定义的a、b输入框组件,但这俩变量只在home.py的作用域里生效,function.py根本找不到它们。
解决办法
最规范的方式是把计算逻辑封装成带参数的函数,通过传参把输入值递过去,具体改法如下:
第一步:修改function.py
把计算逻辑写成接受两个整数参数的函数:
from math import pi def get_volume(t1, t2): return (1/3) * pi * t1 * t1 * t2
第二步:修改home.py
在home.py里获取输入框的值,然后调用上面的函数:
from tkinter import Tk, Entry, Button from function import get_volume win = Tk() # 你的输入框代码不变 a = Entry(win, width=21) a.place(x=200, y=155) b = Entry(win, width=22) b.place(x=375, y=155) # 写一个触发计算的函数 def calculate(): try: # 从输入框取转成整数的值 num1 = int(a.get()) num2 = int(b.get()) # 调用计算函数 result = get_volume(num1, num2) print(f"计算结果:{result}") except ValueError: print("请输入合法的整数!") # 加个按钮触发计算(你也可以用其他方式触发,比如回车) calc_btn = Button(win, text="计算", command=calculate) calc_btn.place(x=200, y=200) win.mainloop()
另一种不推荐的写法(耦合性高)
如果非要在function.py里直接用输入框对象,可以把它们作为参数传给函数,但这种方式会让两个文件耦合度太高,后期不好维护:
修改function.py
from math import pi def calculate_from_entries(entry_a, entry_b): t1 = int(entry_a.get()) t2 = int(entry_b.get()) return (1/3) * pi * t1 * t1 * t2
修改home.py里的计算函数
def calculate(): try: result = calculate_from_entries(a, b) print(f"计算结果:{result}") except ValueError: print("请输入合法的整数!")
内容的提问来源于stack exchange,提问作者imver bilius
相关产品推荐
相关产品推荐

