【发布时间】:2021-12-28 19:47:45
【问题描述】:
我试图添加一些进度条来独立显示一些值,如下所示:
所以我使用此代码添加到我的主程序中,但是当我编写此代码时:
class Processing1ra(tk.Frame):
def __init__(self, parent):
scalevar=IntVar()
self.canvas = Canvas(
bg = "#FFFFFF",
height = 888,
width = 1458,
bd = 0,
highlightthickness = 0,
relief = "ridge"
)
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)
self.canvas.delete(self.rectangle_1)
if scalevar <= 50:
self.rectangle_1=self.canvas.create_rectangle(250.0,356.0,scalevar,a+250,fill="#AFDE14",outline="")
else:
self.rectangle_1=self.canvas.create_rectangle(250, 356,300, a+356,fill="#AFDE14",outline="")
self.rectangle_2=self.canvas.create_rectangle(300, 356, scalevar,a+356, fill="#EB0701",outline="")
问题在于self.canvas.delete(self.rectangle_1),我收到了这些错误
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files\Python39\lib\tkinter\__init__.py", line 1892, in __call__
return self.func(*args)
File "d:\11.17.21\Interfaz4.py", line 544, in volumelevel
self.canvas.delete(self.rectangle_1)
AttributeError: 'Processing1ra' object has no attribute 'rectangle_1'
但是在使用self.canvas.delete(ALL)而不是self.canvas.delete(self.rectangle_1)的情况下,其他组件会被擦除
【问题讨论】:
-
在引用
self.rectangle_1之前,您在哪里定义了它? -
这里的问题是,在
volumelevel()中,您在self.canvas.delete(self.rectangle_1)行中使用了rectangle1。但是,rectangle1被进一步创建了几行。为了解决这个问题,在__init__()中定义rectangle1。你可以把它变小以至于你看不到它:self.rectangle1 = self.canvas.create_rectangle(250, 356, 0, 0, fill="#AFDE14", outline="").
标签: python tkinter tkinter-canvas