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

Tkinter中tableone仅显示在floorplan窗口?报错'int'对象无'_create'属性

修复Tkinter中AttributeError: 'int' object has no attribute '_create'问题

错误原因

  1. 误用Canvas类方法而非实例方法:直接调用Canvas.create_rectangle()是调用Tkinter的Canvas类,会返回整数类型的图形ID,后续将这个ID赋值给tableone后,再用tableone.create_text()就会触发错误——整数对象不存在_create属性。
  2. Canvas归属错误:原代码里的canvas属于主窗口root,就算创建图形也不会显示在floorplan子窗口,必须为子窗口单独创建Canvas实例。
  3. Canvas未添加到窗口:任何Tkinter组件都需要通过pack()/place()/grid()方法挂载到窗口,否则不会显示。

修复后的完整代码

from tkinter import *

root = Tk()
root.title("Main window")
root.geometry("1366x768")

# 点击事件处理
def clicked(*args):
    print("clicked")

def create_floorplan():
    floorplan = Toplevel()
    floorplan.title("Floor plan")
    floorplan.geometry("1366x768")
    
    # 为floorplan窗口创建专属Canvas并铺满窗口
    fp_canvas = Canvas(floorplan, width=1366, height=768)
    fp_canvas.pack(fill=BOTH, expand=True)
    
    # 用fp_canvas实例创建图形,绑定统一标签
    fp_canvas.create_rectangle(75, 55, 195, 105, fill="silver", activefill="gray", tags="tableone")
    fp_canvas.create_text(137, 80, text="1", font=("Helvetica", 20), fill="white", tags="tableone")
    
    # 绑定标签的点击事件到当前Canvas
    fp_canvas.tag_bind("tableone", "<Button-1>", clicked)
    
    # 测试按钮
    testbutton = Button(floorplan, text="test")
    testbutton.place(x=10, y=10)

button1 = Button(root, text="floor plan", command=create_floorplan)
button1.place(x=10, y=10)

root.mainloop()

关键修改点

  • 移除了主窗口的canvas变量(若主窗口不需要可直接删除),在create_floorplan中为子窗口创建专属的fp_canvas实例,并用pack(fill=BOTH, expand=True)让它铺满整个子窗口。
  • 所有图形创建方法(create_rectangle、create_text)都通过fp_canvas实例调用,不再直接操作Canvas类。
  • 使用fp_canvas.tag_bind绑定点击事件,确保事件只作用于子窗口内的图形。
  • 通过统一标签tableone关联矩形和文字,点击其中任意一个都会触发clicked函数,无需单独保存图形ID。

内容的提问来源于stack exchange,提问作者j.jam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:15:36