builtins.AttributeError: 'int'对象没有'create_line'属性

-2 投票
1 回答
594 浏览
提问于 2025-04-30 22:28

我有一段绘图代码,用来在图上标记不同的点。不过,当我在设置x轴的数字线时,总是出现整数错误。

from tkinter import *

def checkered(canvas, line_distance):
   for x in range(line_distance,canvas_width,line_distance):
      canvas.create_line(x, 0, x, canvas_height, fill="#476042")
   for y in range(line_distance,canvas_height,line_distance):
      canvas.create_line(0, y, canvas_width, y, fill="#476042")
###############################################################################
root = Tk()
canvas_width = 1000
canvas_height = 760
w = Canvas(root, 
           width=canvas_width,
           height=canvas_height)
checkered(w,20)           
w.pack()

a = int(canvas_height / 2)
w.create_line(0, a, canvas_width, a, 
               fill="black",width=3)
b = int(canvas_width / 2)
w.create_line(b, 0, b,canvas_height, 
              fill = "red",width=3)
w.create_text(5, ((canvas_height/2)-10)
              ,text="x",font=12)
w.create_text(b+10 ,5
              ,text='y',font=12)
w.create_text(b+10,a-10
              ,text='0',font=12)
w.create_oval(b-5,a-5,b+5,a+5 
              ,fill = 'black')
w=int(canvas_width/50)
z=int(canvas_width/100)
aa=b+w
bb=a-z
cc=a+z 
w.create_line(aa,bb,aa,cc,
              fill='black',width=3)

mainloop()

每次我运行这个程序时,都会收到这个消息:

line 37, in <module>
builtins.AttributeError: 'int' object has no attribute 'create_line'

我觉得这很奇怪,因为'int'在第19行和第22行都能正常工作:

a = int(canvas_height / 2)
w.create_line(0, a, canvas_width, a, 
               fill="black",width=3)

b = int(canvas_width / 2)
w.create_line(b, 0, b,canvas_height, 
              fill = "red",width=3)

那几行都没问题,只有最后一行出错了。希望能得到一些帮助。

暂无标签

1 个回答

1

你把 w 设置成了一个整数:

w=int(canvas_width/50)
z=int(canvas_width/100)
aa=b+w
bb=a-z
cc=a+z 

然后在下一行你还希望它是一个 Canvas 对象:

w.create_line(aa,bb,aa,cc,
              fill='black',width=3)

使用更好的变量名;比如用 canvas 代替 w,这样你就不容易在重用名字时搞混了。

撰写回答