画像を持つクラスを作成したいのですが、マウスのクリックで次の画像に変更したいと思います。私は新しいのですが、私の考えはクラスを似ていました。新しい写真ごとに新しいクラスのインスタンスがある現実の生活に、このようにすることは可能でしょうか?ここに私のコードは画像をクリックするとピクチャが変わる画像のクラス
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.lab.destroy() Picture._count + = 1 self.img = Image.open(r'C:\ ImgArchive \ img%s.png '% Self.newImg = self.newImg'を返しますが、_tkinter.TclError:無効なコマンド名です。!ラベル "' I '私の新しいアイデアは、現実の生活に似たクラスを作ることでした。そこには、新しい絵が登場するたびに新しいクラスのインスタンスがありました。 –