我試圖添加一些進度條來獨立顯示一些值,如下所示:
引數值
所以我使用這段代碼添加到我的主程式中,但是當我編碼時:
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),其他組件將被擦除
uj5u.com熱心網友回復:
您需要在使用self.rectangle_1之前進行初始化。這可以通過為其分配一個None值并通過對其值的測驗來保護呼叫來完成。(雖然tkinter可能會None毫無怨言地接受)
像這樣:
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()
self.rectangle_1 = None # create the attribute here.
def volumelevel(self, scalevar):
a = 16
scalevar = int(scalevar)
if self.rectangle_1 is not None:
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=""
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360449.html
