0
我想創建一個有圖片的類,並通過鼠標點擊更改爲下一個類。我是oop的新手,我的想法是使類相似到現實生活中每個新圖片都有新的類實例,是否可以這樣做?這是我的代碼圖片瀏覽類改變鼠標點擊圖片
import tkinter as tk
from PIL import Image,ImageTk
class Picture():
_count=1
def __init__(self,window):
self.id=Picture._count
Picture._count+=1
self.img=Image.open(r'C:\ImgArchive\img%s.png' % self.id)
self.pimg = ImageTk.PhotoImage(self.img)
self.lab=tk.Label(window,image=self.pimg)
self.lab.pack()
self.lab.bind('<1>',self.click)
def click(self,event):
self.lab.destroy()
self=self.__init__(window)
window = tk.Tk()
window.title('Album')
window.geometry('1200x900')
pic=Picture(window)
window.mainloop()
它工作正常,但我不知道我的課的舊實例被刪除,他們?我用self.lab.destroy(),因爲如果我不新圖片顯示了下來,像這樣
,而不是這個
那麼爲什麼會發生?什麼是高雅它的方式?
命令'自我=自我.__的init __(...)'是代碼的最不尋常的線 - 這意味着你必須更好地組織代碼並將一些代碼從'__init__'移動到分離的方法 - 然後運行這個方法insife'__init__'而不是'self = self .__ init __()' – furas
更好地使用'self。 lab [「image」] = new_image'來替換現有標籤中的圖像。 – furas
我試過這個'def click(self,event): self.lab.destroy() Picture._count + = 1 self.img = Image.open(r'C:\ ImgArchive \ img%s.png'%圖片._count) self.newImg = ImageTk.PhotoImage(self.img) self.lab [「image」] = self.newImg',但得到錯誤'_tkinter.TclError:invalid command name「。!label」'I「對於OOP來說,我的想法是讓類與現實生活類似,每個新圖片都有新的類實例,是否可以做某種方式? –