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

在Tkinter中使用Canvas绘制自定义进度条出现AttributeError如何解决

问题原因

报错是因为volumelevel方法首次被触发时,self.rectangle_1还没有被初始化赋值,直接调用self.canvas.delete(self.rectangle_1)就会抛出属性不存在的异常。同时直接用delete(ALL)会清空画布所有元素,不符合仅更新进度条的需求。

解决方案

修改后的完整代码如下:

import tkinter as tk
from tkinter import Canvas, Scale, IntVar

class Processing1ra(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        scalevar = IntVar()
        self.canvas = Canvas(
            bg = "#FFFFFF",
            height = 888,
            width = 1458,
            bd = 0,
            highlightthickness = 0,
            relief = "ridge"
        )
        self.canvas.pack()
        # 提前初始化进度条属性
        self.rectangle_1 = None
        self.rectangle_2 = None
        self.scale = Scale(from_=0, to=100, orient="horizontal", variable=scalevar, command=self.volumelevel)
        self.scale.pack()

    def volumelevel(self, scalevar):
        a = 16
        scalevar = int(scalevar)
        # 删除前先判断元素是否存在
        if self.rectangle_1 is not None:
            self.canvas.delete(self.rectangle_1)
        if self.rectangle_2 is not None:
            self.canvas.delete(self.rectangle_2)
        
        if scalevar <= 50:
            self.rectangle_1 = self.canvas.create_rectangle(250.0, 356.0, 250 + scalevar, 356 + a, fill="#AFDE14", outline="")
            self.rectangle_2 = None
        else:
            self.rectangle_1 = self.canvas.create_rectangle(250, 356, 300, 356 + a, fill="#AFDE14", outline="")
            self.rectangle_2 = self.canvas.create_rectangle(300, 356, 250 + scalevar, 356 + a, fill="#EB0701", outline="")
修改说明
  • 补全了父类Frame的初始化调用,以及canvas的pack渲染操作,解决原代码运行后画布不显示的问题
  • 提前将两个进度条矩形的属性初始化为None,删除前先判断是否存在,避免首次调用方法时报错
  • 修正了原代码的坐标计算错误:原写法把进度值直接作为矩形右边界,会导致进度条从250坐标开始但最大仅延伸到100坐标,完全不可见,修改为250 + scalevar符合进度条从左到右增长的逻辑
  • 数值小于等于50时主动将rectangle_2设为None,避免后续删除时残留旧的红色进度块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:06:05