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

Tkinter运行报错:'int' object has no attribute 'get' 如何解决?

报错原因

你代码的核心问题出在对e1、e2、e3变量的重复赋值:

  1. 首先创建了Entry实例并赋值给了全局变量e1/e2/e3,此时这三个变量存储的是可调用get()方法的输入框对象
  2. 后续调用my_canvas.create_window()方法时,你又把该方法返回的整数类型的画布组件ID重新赋值给了e1/e2/e3,覆盖了原来的Entry实例
  3. 最终你在函数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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:24:02