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

Python Tkinter报错:'int'对象无'draw_line'属性(科赫雪花绘制)

问题分析与解决

核心错误原因

报错AttributeError: 'int' object has no attribute 'draw_line'的直接诱因:

  • 调用方式错误:draw_line是当前类的成员方法,并非画布对象self.canv的方法,正确调用方式是self.draw_line,而非self.canv.draw_line。
  • 变量未定义:x0和y0在draw_base函数中未声明,需将传入trisection的起始点(0和self.canv_length/2)明确赋值给这两个变量。
  • 潜在隐患:若self.canv实际是整数(比如误将画布长度赋值给它),需检查类初始化代码,确保self.canv是Tkinter的Canvas实例,否则draw_line里的create_line也会报错。

修正后的draw_base函数

def draw_base(self):
    x0, y0 = 0, self.canv_length/2
    x1, y1 = 500, self.canv_length/2
    xa, ya, xb, yb = self.trisection(x0, y0, x1, y1)
    # 角度转弧度,避免三角函数计算错误
    xc, yc = self.rotate_points(xa, ya, xb, yb, math.radians(-60))
    # 调用类的draw_line方法绘制各段
    self.draw_line(x0, y0, xa, ya)
    self.draw_line(xa, ya, xc, yc)
    self.draw_line(xc, yc, xb, yb)
    self.draw_line(xb, yb, x1, y1)

额外优化:rotate_points函数的通用性修正

原函数把cos写死为0.5仅适配60度,改为通过三角函数计算,支持任意角度:

def rotate_points(self, xa, ya, xb, yb, angle_rad):
    sin = math.sin(angle_rad)
    cos = math.cos(angle_rad)
    x_c = cos*(xb-xa) - sin*(yb-ya) + xa
    y_c = sin*(xb-xa) + cos*(yb-ya) + ya
    return x_c, y_c

调用时传入math.radians(-60)将角度转为弧度,保证计算准确。

内容的提问来源于stack exchange,提问作者user14880056

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:05:41