Tkinter运行报错:'int' object has no attribute 'get' 如何解决?
报错原因
你代码的核心问题出在对e1、e2、e3变量的重复赋值:
- 首先创建了Entry实例并赋值给了全局变量
e1/e2/e3,此时这三个变量存储的是可调用get()方法的输入框对象 - 后续调用
my_canvas.create_window()方法时,你又把该方法返回的整数类型的画布组件ID重新赋值给了e1/e2/e3,覆盖了原来的Entry实例 - 最终你在函数
a()中调用e1.get()时,实际是对整数类型的ID调用方法,自然触发'int' object has no attribute 'get'报错
另外还存在一个小逻辑错误:a()函数末尾print(a, b, c)中的a是当前函数本身,你实际要打印的是前面读取的a1、b1、c1变量;多进程启动tkinter窗口建议添加if __name__ == '__main__'判断,避免Windows系统下启动报错。
修复方案
将Entry实例和画布返回的ID分开存储即可,不需要保留的ID可以不赋值给变量,修复后的完整代码如下:
from tkinter import * from multiprocessing import Process def a(): a1 = e1.get() b1 = e2.get() c1 = e3.get() print(a1, b1, c1) def window(): window = Tk() my_canvas = Canvas(window, width=530, height=240, bd=0, highlightthickness=0) my_canvas.pack(fill="both", expand=True) global e1, e2, e3 # 全局变量只存Entry实例,不被后续create_window的返回值覆盖 e1 = Entry(window, fg="black", bd=0) e2 = Entry(window, fg="black", bd=0) e3 = Entry(window, fg="black", bd=0) # create_window返回的ID不需要可以不用接收,或者用其他变量存储 my_canvas.create_window(40, 20, anchor="nw", window=e1) my_canvas.create_window(40, 60, anchor="nw", window=e2) my_canvas.create_window(40, 100, anchor="nw", window=e3) button1 = Button(window, text='Print', bd=0, bg="black", fg="white", command=a) my_canvas.create_window(400, 20, anchor="nw", window=button1) window.mainloop() if __name__ == '__main__': p = Process(target=window) p.start() p.join()
内容的提问来源于stack exchange,提问作者finix
相关产品推荐
相关产品推荐

