Kártya játékban létrehozott objektumok és attribútumok, törlése.

 Kicsit tömény lesz a példa, de nagyon fontos. Igyekeztem ellátni magyarázatokkal.

https://drive.google.com/file/d/18lRM6WeiDn1Al74aGQG4NQzJGUJlL5X8/view?usp=sharing

import tkinter as tk
from PIL import Image, ImageTk


# from pprint import pprint


class ButtonBind(tk.Tk):
def __init__(self):
super().__init__()

self.geometry('500x400+500+100')

self.img = {}
self.button = {}

self.frame = tk.Frame(self)
self.frame.pack()

self.fajl_lista = ["10_kör.png",
"02_káró.png",
"08_pikk.png"]

for i in range(0, 3):
self.img_file = Image.open(f"fkartyak/{self.fajl_lista[i]}")
self.img[i] = ImageTk.PhotoImage(self.img_file)

# A Button widgetek kép attribútumai: típus, sztring név.
print('\n', self.img[i]) # pyimage1, pyimage2, pyimage3
print(type(self.img[i])) # <class 'PIL.ImageTk.PhotoImage'> .....
print(f'sztring: {str(self.img[i])}')

self.button[i] = tk.Button(self.frame, image=str(self.img[i]))
self.button[i].pack(side='left')
self.button[i].bind('<Button-1>', self.main)

def main(self, event):
if event.widget.cget('image') == 'pyimage1':
print(f'\n{self.fajl_lista[0]}')
print(f'{int(self.fajl_lista[0][0:2])}')
self.button[0].destroy()

elif event.widget.cget('image') == 'pyimage2':
print(f'\n{self.fajl_lista[1]}')
print(f'{int(self.fajl_lista[1][0:2])}')
self.button[1].destroy()

elif event.widget.cget('image') == 'pyimage3':
harmadik_kepfajl = self.fajl_lista[2]
print(f'\n Harmadik_kepfajl: {harmadik_kepfajl}')

harmadik_kepfajl_ertek = int(self.fajl_lista[2][0:2])
print(f'harmadik_kepfajl_ertek: {harmadik_kepfajl_ertek}')

# kép törlése a gombbal együtt
self.button[2].destroy()

# ********************************************************************

# Kép fájl objektum attributumának a megjelenítése
print(f'\nself.img_file: {self.img_file}')
# self.img_file: <PIL.PngImagePlugin.PngImageFile image mode=RGB size=102x138 at 0x28F9E11BB00>

# Az attribútum törlése
del self.img_file

try:
print(f'self.img_file: {self.img_file}')

except AttributeError:
print('A "_tkinter.tkapp" objektumnak nincs "img_file" attribútuma,\n'
'mert törölve lett!')

else:
print('Minden okés!')

# **************************************************************************

# A kép objektumok és a memória helyük kiíratása
print(f'\nself.img: {self.img}')
# self.img: {0: <PIL.ImageTk.PhotoImage object at 0x0000028F9C0CBFB0>,
# 1: <PIL.ImageTk.PhotoImage object at 0x0000028F9E08C980>,
# 2: <PIL.ImageTk.PhotoImage object at 0x0000028F9E11BA10>}

# A harmadik azaz a kettes indexű kártyalap objektumának a törlése
del self.img[2]
# Újra kiírat
print(f'self.img: {self.img}')
# self.img: {0: <PIL.ImageTk.PhotoImage object at 0x000001ED666B8AA0>,
# 1: <PIL.ImageTk.PhotoImage object at 0x000001ED666B8A40>}
# A 2 indexű kép objektum törölve!

# ******************************************************************************

# A Button objektumok megjelenítése
print(f'\nself.button: {self.button}')
# self.button: {0: <tkinter.Button object .!frame.!button>,
# 1: <tkinter.Button object .!frame.!button2>,
# 2: <tkinter.Button object .!frame.!button3>}

# A hármas azaz a kettes indexű (kép) Button törlése a szótárból.
del self.button[2]
print(f'self.button: {self.button}')
# self.button: {0: <tkinter.Button object .!frame.!button>,
# 1: <tkinter.Button object .!frame.!button2>}
# A 2 indexű Button objektum törölve!


if __name__ == '__main__':
ablak = ButtonBind()
ablak.mainloop()

További tananyag: https://realpython.com/python-del-statement/


Nincsenek megjegyzések:

Megjegyzés küldése