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/


Kártya játék Francia kártyával.

 A YouTube -on láttam egy kártyajáték videó kódot és mivel nem értettem, gondoltam csinálok én is egyet. Tovább fejleszthető.

import random
import tkinter as tk
from tkinter import messagebox


class PakliKeszites:
def __init__(self):

self.pakli = []

def pakli_keszites(self):
szinek = ['pikk', 'treff', 'kör', 'káró']

for szin in szinek:
for ertek in range(2, 15):
if ertek < 10:
self.pakli.append(f'0{ertek}_{szin}.png')
else:
self.pakli.append(f'{ertek}_{szin}.png')

random.shuffle(self.pakli)

return self.pakli


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

self.title('Kártya játék.')
self.geometry('500x400+800+100')
self.configure(bg='green')

self.jatekos_pont = 0
self.oszto_pont = 0

# Keret a két kártyalapnak
self.frame = tk.Frame(self, bg='green')
self.frame.pack(pady=20)

self.jatekos_frame = tk.LabelFrame(self.frame,
text='Játékos',
bg='yellow')
self.jatekos_frame.grid(row=0, column=0, padx=20,
pady=20, ipadx=10, ipady=5)

self.oszto_frame = tk.LabelFrame(self.frame,
text='Osztó',
bg='yellow')
self.oszto_frame.grid(row=0, column=1, padx=20,
pady=20, ipadx=10, ipady=5)

self.jatekos_label = tk.Label(self.jatekos_frame, image='')
self.jatekos_label.pack()

self.oszto_label = tk.Label(self.oszto_frame, image='')
self.oszto_label.pack()

self.ujlapok = tk.Button(self, text='Osztás',
command=self._uj_osztas)
self.ujlapok.pack(pady=20)

keszito = PakliKeszites()
self.pakli = keszito.pakli_keszites()

self._kezdo_osztas()

def _kezdo_osztas(self):
self.jatekos_lap = self.pakli.pop()
self.oszto_lap = self.pakli.pop()

self.jatekos_photo = tk.PhotoImage(
file=f"images2/{self.jatekos_lap}")
self.oszto_photo = tk.PhotoImage(
file=f"images2/{self.oszto_lap}")

self.jatekos_label.config(image=self.jatekos_photo)
self.oszto_label.config(image=self.oszto_photo)

self.title(f'Lapok száma: {len(self.pakli)}')

self.eredmeny_jelzo()

def _uj_osztas(self):
del self.jatekos_lap
del self.oszto_lap
del self.jatekos_photo
del self.oszto_photo

try:
self.jatekos_lap = self.pakli.pop()
self.oszto_lap = self.pakli.pop()

self.title(f'Lapok száma: {len(self.pakli)}')

except IndexError:
self.title(f'A lapok elfogytak!: {len(self.pakli)}')

valasz = tk.messagebox.askquestion(
title='Vége a partinak!',
message='Új játék mehet?') # no, yes

if valasz == 'no':
self.destroy()
else:
self.destroy()
Main()

else:
self.jatekos_photo = tk.PhotoImage(
file=f"images2/{self.jatekos_lap}")
self.oszto_photo = tk.PhotoImage(
file=f"images2/{self.oszto_lap}")

self.jatekos_label.config(image=self.jatekos_photo)
self.oszto_label.config(image=self.oszto_photo)

self.eredmeny_jelzo()

def eredmeny_jelzo(self):
self.jatekos_pont += int(self.jatekos_lap[:2])
self.oszto_pont += int(self.oszto_lap[:2])
print(f'Játékos pontjai: {self.jatekos_pont}')
print(f'Osztó pontjai: {self.oszto_pont}')


if __name__ == '__main__':
m = Main()
m.mainloop()

A kártya képek fájl nevei:

02_káró.png

02_kör.png

02_pikk.png

02_treff.png

stb..stb..

14_káró.png

14_kör.png

14_pikk.png

14_treff.png


Layco


Válaszok, válaszolók

Különböző fórumokon a programozással kapcsolatos kérdésekre elsősorban a Moderátorok válaszolnak. A kérdezők felé fontos igényeket fogalmaz meg a csoport szabályzata. Kevesebb elvárással találkozom a válaszolók felé. Ezzel kapcsolatban szeretnék néhány gondolatot megosztani. Egyszerűen azért mert több helytelen, használhatatlan válasszal találkoztam már. A jó válasz kritériumai:

  • A kérdésre válaszol.
  • Nem személyeskedik.
  • Egyszerűen fogalmaz lényegre törő válaszokat ad.
  • A teljes javított működő kódot prezentálja.
  • Építő jellegű kérdéseket tesz fel, ha nem ért valamit.
  • Nem kioktató.
  • Nincsenek előítéletei.
  • Nyugodt, kedves, barátságos, segítőkész. 
  • Szívesen válaszol, vagy sehogy.



Kép Pixabay

Tájékoztató Python programozáshoz elinduláskor.

 Mivel ez az oldal tényleg azoknak szól akik most ismerkednek ezzel a világgal és soha semmit nem tanultak ezzel kapcsolatban, csak ők olvassák tovább.


Szeretnél programozást tanulni? Én a Pythont ajánlom. Miért? Erre több okom van az egyik, hogy főleg ezt ismerem, a másik ez: https://www.tiobe.com/tiobe-index/ De komolyra fordítva szerintem a legérthetőbb és a legolvashatóbb kóddal bír. https://www.python.org/

Mire lesz szükséged? Ezzel a kérdéssel a kutya sem törődik. Legtöbb segítő oldalon abból indulnak ki, hogy már profi programozó vagy. Mindenhez értesz a Windowson, tudod mi a Markdown formázás, anyanyelven vágod az Angolt, matek zseni vagy stb.

Hány éves vagy? Tök mindegy! Én nyugdíjason kezdtem. Mi a végzettséged? Legyen bármi, nem sokat számít. Szeresd a Pythont! Élvezd, hogy utasítod, megoldásokra veszed rá! Ebben szeretnél dolgozni? Sokat fogsz tanulni, új ismereteket esetleg évekig.  

A legfontosabb! Rengeteg segítségre lesz szükséged, szerencsére ez rendelkezésedre áll. Az elindulásban fogok neked segíteni. Minden infót gyűjts össze amit itt le fogok írni! Bátran írj magyar szavakkal (ahol lehet) szkripteket! Előbb utóbb akarod vagy sem, megfogod tanulni az angolt, ha sokat programozol. Ne engedd, hogy az eléjén ezzel elvegyék a kedved! Tehát ráérsz átállni!

Kezdjük! Számítógép Windows 64 bit. PyCharm a legjobb fejlesztő környezet a Python kódoláshoz. PyCharmCommunity Edition. Google böngésző. Azért Google mert állandóan fordítgatnod kell majd. Szereld fel egér és honlap fordítóval a beépítetten kívül https://translate.google.com/?hl=hu

Néhány idegen szót nem fogsz érteni ezért javaslom a következő oldal mentését: http://pozicio.szojelentese.com/ vagy https://topszotar.hu/angolmagyar/void esetleg https://wikiszotar.hu/ertelmezo-szotar/Kezd%C5%91lap

Ahogy elkezdsz kódokat írni, problémák adódnak, ezért szeretnéd megkérdezni, hogy miért baszakodik veled. Na de hogyan? Képekre háklis a legtöbb közösség, nehezen olvasható és nem menthető a kód, újra kellene írni. Ha szóban kérdezed kód nélkül az sem biztos, hogy jó ötlet.

Javaslok egy egyszerű kód megosztó weboldalt, regisztrálj be, próbáld ki, használd a Google honlap fordítót és ne felejtsd el Python 3-ra állítani (jobbra fenn): https://www.onlinegdb.com/ Természetesen rengeteg más oldal is van. A megosztó linket kapcsold a kérdéshez! 

Próbáltad már az Edge bing-csevegését Python-hoz segítség kérésre: https://sl.bing.net/fhskEo0mpDE

 A PyCharm-ban – File – Print..-re kattintva akár pdf formátumú mentéseket is készíthetsz a kódodról.

Kérdésekre válaszolgató honlapok többségén meg tudod osztani a kódodat Markdown formázással:

```# Kód megosztása...

   # Markdown formázással.
   print('Helló Világ!')

```

Bővebben: https://roadmap.schdesign.hu/schdesign/tutorial/markdown-alapok/ vagy https://thegige.wordpress.com/2014/11/19/markdown-utmutato/ más: https://www.markdowntutorial.com/lesson/1/ stb.

A kódodat legegyszerűbben itt tudod feltölteni és megosztani:

https://www.onlinegdb.com/

Tapasztalatom, hogy Angol nyelvű oldalakon több, jobb ismertető van. Írd be: Python tutorial. Konkrét példánál pl.: Python isdigit example stb. Rengeteg oktató honlap létezik. A YouTube-n is.

Ha kezdésnél ragaszkodsz a magyar ismertetőkhöz: https://sulipy.hu/ vagy https://tinyurl.hu/yxs4 vagy https://tinyurl.hu/J6Wz esetleg letölthető a következő ingyenes pdf anyag: https://mtmi.unideb.hu/pluginfile.php/554/mod_resource/content/1/thinkcspy3.pdf továbbá: http://faragocsaba.hu/ stb..

További közösségi segítség: 

https://www.facebook.com/groups/python.programozok/ és 

https://tinyurl.hu/3Qmd és 

valamint: https://discuss.python.org/.

Mindenes ajánlatom: https://www.youtube.com/@techatival/videos

Ingyenes képek: https://pixabay.com/hu/

Python csomagok: https://pypi.org/ 

Ja, ja macerás és még nem írtál kódot.

 


Ha valami kimaradt írj!