Create multiple images in a loop 1 - 7. + Sok más.

 1./

Több kép létrehozása ciklusban.


import tkinter as tk
from PIL import ImageTk, Image
from pprint import pp

root = tk.Tk()

"""
Minden alkalommal, amikor újra hozzárendeli az img-t a ciklusban,
az előző kép adatai megsemmisülnek, és többé nem jeleníthetők meg.
A probléma megoldásához adja hozzá a képeket egy listához,
hogy véglegesen tárolja őket:"""

ids = ['m2', 'm3', 'p10', 'p7', 't11', 't4', 'z3', 'z8', 'z9', 'm11']

imgs = []
for i in range(10):
imgs.append(ImageTk.PhotoImage(Image.open(f"images/{ids[i]}.png")))
tk.Label(root, image=imgs[-1]).pack(side='left')

pp(imgs)

root.mainloop()
Kártyajátékok létrehozásának vagy játszásának keretrendszere: 

*********************************************************************

2./

Creating multiple images in a loop Canvas.


import tkinter as tk
from PIL import ImageTk, Image
from pprint import pp

root = tk.Tk()
root.geometry('550x200+200+100')

canvas = tk.Canvas(root, bg='green')
canvas.pack(fill='both', expand=True)

ids = {
"m2": (50, 70),
"m3": (100, 70),
"m4": (150, 70),
"p10": (200, 70),
"p11": (250, 70),
"t7": (300, 70),
"t8": (350, 70),
"z9": (400, 70),
"p9": (450, 70),
'm8': (500, 70)}

imgs = []
for key, value in ids.items():
imgs.append(ImageTk.PhotoImage(
Image.open(f"images/{key}.png")))

canvas.create_image(value, image=imgs[-1])

pp(imgs)

root.mainloop()
Kártyajátékok létrehozásának vagy játszásának keretrendszere: 

*********************************************************************

3./

Multiple images in the cycle with click of the mouse.

import tkinter as tk
# from pprint import pp


class TagsBind(tk.Canvas):
def __init__(self, container):
super().__init__(container)

self.configure(bg='black')

self.j_szotar = {
'm02': (50, 70),
'm03': (120, 70),
'm10': (190, 70),
'm11': (260, 70),
'p07': (330, 70),
'p08': (400, 70),
'z09': (470, 70),
'z02': (540, 70)}
# pp(self.j_szotar)

self._elemek()

def _elemek(self):
self.kep = {}
ID = 1
for key, value in self.j_szotar.items():
self.kep[ID] = tk.PhotoImage(file=f'kepek/{key}.png')
self.create_image(value, image=self.kep[ID], tags=key)
self.tag_bind(key, '<Button-1>', self.kepre_kattintas)
ID += 1

def kepre_kattintas(self, event):
# A kattintási eseményhez kapcsolja a megfelelő elemet
item = self.find_closest(event.x, event.y)
print(f'Elem koordináta: {self.coords(*item)}')

print(f'Az {int(*item)} képre kattintott!\n'
f'Kattintási koordináták: x={event.x}, y={event.y}')


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

self.geometry('600x240+500+100')
self.title('TagsBind')

tb = TagsBind(self)
tb.pack(fill='both', expand=True)


if __name__ == "__main__":
ablak = App()
ablak.mainloop()

*********************************************************************

4./

Kurzor paraméterek


import tkinter as tk
from tkinter import ttk


win = tk.Tk()
win.config(
bg='#F2BBA0')
win.geometry(
"750x250")
win.config(
cursor='heart')


def ablak_bezar():
# Bezárja az ablakokat
win.focus()
win.destroy()


def foglalt_kurzor():
# A kurzor foglalt
win.config(cursor="watch")


def nincs_kursor():
# A kurzor nem látható
win.config(cursor="None")


def normal_kurzor():
# A kurzor szabad
win.config(cursor="")


def parameters():
felugro_ablak = tk.Toplevel(win)
text = tk.Text(felugro_ablak,
font="Georgia 12",
                   height=29, width=50, bg="#bcbcbc")
text.pack()

kurzorok =
"""
'arrow', 'man', 'based_arrow_down', 'middlebutton',
'based_arrow_up', 'mouse', 'boat', 'pencil', 'bogosity',
'pirate', 'bottom_left_corner', 'plus',
'bottom_right_corner', 'question_arrow', 'bottom_side',
'right_ptr', 'bottom_tee', 'right_side', 'box_spiral',
'right_tee', 'center_ptr', 'rightbutton', 'circle',
'rtl_logo', 'clock', 'sailboat', 'coffee_mug',
'sb_down_arrow', 'cross', 'sb_h_double_arrow',
'cross_reverse', 'sb_left_arrow', 'crosshair',
'sb_right_arrow', 'diamond_cross',
'sb_up_arrow', 'dot', 'sb_v_double_arrow', 'dotbox',
'shuttle', 'double_arrow', 'sizing', 'draft_large',
'spider', 'draft_small', 'spraycan', 'draped_box',
'star', 'exchange', 'target', 'fleur', 'tcross',
'gobbler', 'top_left_arrow', 'gumby', 'top_left_corner',
'hand1', 'top_right_corner', 'hand2', 'top_side', 'heart',
'top_tee', 'icon', 'trek', 'iron_cross', 'ul_angle',
'left_ptr', 'umbrella', 'left_side', 'ur_angle',
'left_tee', 'watch', 'leftbutton', 'xterm', 'll_angle',
'X_cursor', 'lr_angle'"""

text.insert(tk.END, kurzorok)


betuk =
'Century 14 bold'
hatter = '#2da7e4'

ttk.Label(win,
text="Nyomj Entert az ablak bezárásához!",
font=betuk,
background=hatter).pack(ipadx=10, pady=(10, 5))

ttk.Label(win,
text="Nyomj 'a'-t a kurzor foglaltra vált!",
font=betuk,
background=hatter).pack(ipadx=10, pady=5)

ttk.Label(win,
text="Nyomj 's'-t a kurzor eltűnik!",
font=betuk,
background=hatter).pack(ipadx=10, pady=5)

ttk.Label(win,
text="Nyomj 'd'-t a normál kurzorért!",
font=betuk,
background=hatter).pack(ipadx=10, pady=5)

ttk.Label(win,
text="Nyomj 'p'-t további paraméterekért!",
font=betuk,
background=hatter).pack(ipadx=10, pady=5)

win.bind(
'<Return>', lambda e: ablak_bezar())
win.bind(
'a', lambda e: foglalt_kurzor())
win.bind(
's', lambda e: nincs_kursor())
win.bind(
'd', lambda e: normal_kurzor())
win.bind(
'p', lambda e: parameters())

win.mainloop()

*********************************************************************

5./

Egy kép objektum újra konfigurálása.

import tkinter as tk

root = tk.Tk()


def katt():
c.coords(image, 200, 200)
kep.configure(file='kep/foci.png')


c = tk.Canvas(root, width=400, height=400)
c.pack()
kep = tk.PhotoImage(file='kep/emoji.png')
image = c.create_image(100, 100, image=kep)


c.bind('<Button-1>', lambda e: katt())

root.mainloop()

Labda Emoji

*********************************************************************

6./

Kártya játék alapozó kód bemutató.

Az osztás gombbal lehet lapokat kérni, A lapokra kattintással törlés.

Ha elfogytak a lapok újra és újra kérhető, végtelenségig.

Szükséges anyagok:

koordinata.txt

50, 70
120, 70
190, 70

szinertek.txt

m02
m03
m04
m07
m08
m09
m10
m11
t02
t03
t04
t07
t08
t09
t10
t11
p02
p03
p04
p07
p08
p09
p10
p11
z02
z03
z04
z07
z08
z09
z10
z11

kep_fajl


A kód:


import tkinter as tk

import random
from ast import literal_eval as createtuple
from pprint import pp


class EgySzotar:
def __init__(self, mappa, szinertek_txt, koordinata_txt):
self.mappa = mappa
self.szin_ertek_txt = szinertek_txt
self.koordinata_txt = koordinata_txt

self.szin_ertek_lista = None
self.haromlap = None
self.koord_lista = None

self.kartyaertekek()
self.harom_lap()
self.koordinatak()

def kartyaertekek(self):
"""A harminckét kártyalap színeinek és értékeinek az
összekeverése."""
with open(self.mappa+'/'+self.szin_ertek_txt,
encoding='utf-8') as f:

# A teljes kép fájl lista
self.szin_ertek_lista = [
(line.strip()) for line in f.readlines()]

random.shuffle(self.szin_ertek_lista)
return self.szin_ertek_lista

def harom_lap(self):
"""Három kártyalap fájl"""
self.haromlap = self.szin_ertek_lista[0:3]
del self.szin_ertek_lista[0:3]

return self.haromlap

def koordinatak(self):
"""Három koordináta listában"""
with (open(self.mappa+'/'+self.koordinata_txt,
encoding='utf-8') as f):

# Három tuple -be tesz egy - egy koordinátát...
# ..azt pedig egy listába
self.koord_lista = [
createtuple(f.readline()) for _ in range(3)]

return self.koord_lista

def kesz_szotar(self):
"""A két listából elkészíti a szótárt"""
szotar = dict(map(lambda i, j: (i, j),
self.haromlap,
self.koord_lista))

return szotar


class Osztas(tk.Canvas):
"""A kártyalapok leosztását, lapokra kattintásra
törlésüket végzi. Ha elfogytak a lapok új adag kérhető
gomb kattintásra"""
def __init__(self, container):
super().__init__(container)
self.jatekoslap = None
self.kartya_sorszam = None
self.szotar = {}
self.ID = 1
self.kep_obj = {}
self.configure(bg='black')

# Button create
self.osztas_gomb = tk.Button(
self, text='Osztás',
state='normal',
command=self.kep_keszites)
self.osztas_gomb.place(x=140, y=160)

def kep_keszites(self):
self.osztas_gomb.configure(state='disabled')
# Osztály példány
ESz = EgySzotar(
'txt_fajl',
'szinertek.txt',
'koordinata.txt')
# Osztály metódus
self.szotar = ESz.kesz_szotar()

# loop
for key, value in self.szotar.items():
# Képek betöltése
self.kep_obj[self.ID] = (
tk.PhotoImage(file=f'../kep_fajl/{key}.png'))

# Képek megjelenítése
self.create_image(
value,
image=self.kep_obj[self.ID],
tags=key)

# Kattintási esemény konfigurálás
self.tag_bind(key, '<Button-1>', self.eger_kattintas)

self.ID += 1

print('\nTörlés előtt a szótár =\n', self.szotar)
print('Törlés előtt a kép objektumok =')
pp(self.kep_obj)

def eger_kattintas(self, event):
# A kattintási eseményhez kapcsolja a megfelelő elemet
sorsz = self.find_closest(event.x, event.y)
# A kártyakép sorszáma 1-10 ig.
self.kartya_sorszam = int(*sorsz)
print(f'\nEgér kattintásra: {self.kartya_sorszam=}')

# Az aktuális kattintott kartya színe és értéke
szin_ertek = self.gettags("current")
self.jatekoslap = szin_ertek[0]
print(f'{self.jatekoslap=}')

# metódus hívás
self.torlesek()

def torlesek(self):
print(f'{self.ID=}')

# Egy elem törlése a szótárból
del self.szotar[self.jatekoslap]
# Egy elem törlése a kép objektum gyűjtőből.
del self.kep_obj[self.kartya_sorszam]

print('\nTörlés után a szótár = \n', self.szotar)
print('Törlés után a kép objektum =')
pp(self.kep_obj)

# Üres szótárak = False
logikai_ertek1 = any(self.szotar)
logikai_ertek2 = any(self.kep_obj)

# False esetén:
if not logikai_ertek2 and not logikai_ertek1:
self.osztas_gomb.configure(state='normal')


class App(tk.Tk):
"""Elkésziti a tkinter ablakot."""
def __init__(self):
super().__init__()
self.geometry('300x200+700+100')

# A Canvas osztály beágyazása, példányosítás
laphivasok = Osztas(self)
laphivasok.pack()


if __name__ == '__main__':
app = App()
app.mainloop()


 


Készítette: Layco

Kártyajátékok létrehozásának vagy játszásának keretrendszere: 

*********************************************************************

7./ Végűl szintén egy kártya játék alap, igény szerint kész alkalmazássá fejleszthető.

Ezzel ezt az oldalt is lezárom, majd új dolgokkal jelentkezem.

import tkinter as tk
from tkinter import messagebox


class KepKeszito(tk.Tk):
"""Öt kártyalap leosztása; osztás gomb.
Lapok sorbarendezése; sorbarendezés gomb.
Egy kártyalapra kattintás, a lap törlése.
Beszúrásra a törölt lap helyett új kártya; beszúrás gomb.
Ismét: Lapok sorbarendezése; sorbarendezés gomb stb...
"""

def __init__(self):
super().__init__()
self.geometry('600x350+700+100')

# A beolvasott kártyalapok szótárja.
self.image = {}

# Canvas képkészítő
self.canvas_kep = {}
# A kattintott kép pozíciója lesz,
# amit az uj hívás lapja felvesz.
self.pozicio = None

# A maradék pakli osztás után
self.maradek_pakli = [
't02', 'z04', 't11', 'p03', 'p10', 'z02', 'z03']

# Osztáskor megjelenített kártyalapok értékei és koordinátái
self.pakli_lapertekei = [
'm02', 'p04', 'z11', 'm03', 'z10']
self.lap_koordinatak = [
(50, 90), (150, 90), (250, 90), (350, 90), (450, 90)]

# Canvas configure
self.canvas = tk.Canvas(self, width=600,
height=300, bg='black')
self.canvas.pack(anchor=tk.CENTER,
fill='both', expand=True)

# gomb 1
self.oszt_g = tk.Button(self.canvas, text='Osztas',
state='normal',
command=self.osztas)
self.oszt_g.pack(padx=30, side='left')

# gomb 2
self.beszur_g = tk.Button(self.canvas, text='Beszúr',
state='disabled',
command=self.beszuras)
self.beszur_g.pack(padx=30, side='left')

# gomb 3
self.sorban_g = tk.Button(self.canvas, text='Sorbarendez',
state='disabled',
command=self.lapokat_sorba_rendez)
self.sorban_g.pack(padx=30, side='left')

def osztas(self):
"""Öt kártyalap leosztása az asztalra."""
self.oszt_g.configure(state='disabled')
self.sorban_g.configure(state='normal')
for i, ertek in enumerate(self.pakli_lapertekei):
if i < 5:
# beolvas
self.image[ertek] = (
tk.PhotoImage(file='images/' + ertek + '.png'))

# megjelenít
self.canvas_kep[ertek] = \
(self.canvas.create_image(
self.lap_koordinatak[i],
image=self.image[ertek], tags=ertek))

# kattintható
self.canvas.tag_bind(
ertek, "<Button-1>",
lambda e: self.eger_kattintas())

else:
break

def beszuras(self):
"""A törölt lap helyére új lapot tesz"""
if self.maradek_pakli:
self.sorban_g.configure(state='normal')
self.beszur_g.configure(state='disabled')

ertek = self.maradek_pakli.pop(0)
print(f'\nBeszurási kártyalap: {ertek=}')

# Új kartyakép beolvasás
self.image[ertek] = tk.PhotoImage(
file='images/' + ertek + '.png')

# A beszúrandó kép megjelenik
self.canvas_kep[ertek] = (
self.canvas.create_image(
self.pozicio,
image=self.image[ertek], tags=ertek))

# Bal gomb egérrel kattintható.
self.canvas.tag_bind(
ertek, "<Button-1>",
lambda e: self.eger_kattintas())
else:
messagebox.showinfo("Hoppá!", "Elfogytak a lapok.")

def eger_kattintas(self):
"""Törli a kattintott lapot!"""
self.beszur_g.configure(state='normal')
self.sorban_g.configure(state='disabled')

# A kártya értékeinek a kinyerése
legutobbi_ertek = self.canvas.gettags("current")
print(f'\n A legutóbbi egér kattintásra:'
f'\n{legutobbi_ertek=}')
kep_ertek = legutobbi_ertek[0]
print(f'A kattintott kép értéke:\n{kep_ertek=}')

# Vissza adja a kattintott kép koordinátáit.
koordinata_pozicio = self.canvas.coords(kep_ertek)
self.pozicio = tuple(koordinata_pozicio)
print(f'A kattintott kép poziciója: {self.pozicio}')

if legutobbi_ertek:
# Törli a kattintott kártyalapot.
self.canvas.delete(kep_ertek)
del self.image[kep_ertek]
del self.canvas_kep[kep_ertek]
else:
print('Nem törölt!')

print(f'A kattintott, törölt elem nélkűli szótár:'
f'\n{self.canvas_kep=}')

def lapokat_sorba_rendez(self):
"""ABC sorba rendezi a kártyalapokat nevei-értékei szerint"""
self.sorban_g.configure(state='disabled')

print('\n lapokat_sorba_rendez():')
# Ellenőrzi az öt kártyalap szótár tartalmát.
print(f'Sorbarendezés előtt:\n{self.canvas_kep=}')

# A canvas_kép elemeit ABC szerint sorba rendezi
lap_ertekek = [key for key in self.canvas_kep.keys()]
sorban_lista = sorted(lap_ertekek)

# A sorba rendezett kép elemek uj koordinátát kapnak...
# és ott megjelennek.
for i, elem in enumerate(sorban_lista):
self.canvas.coords(elem, self.lap_koordinatak[i])

# A canvas_kép szótárban is sorba rendezi az elemeket...
# ...függvény!
self.canvas_kep = self.szotart_sorba_rendez()

# Ellenőrzi az öt kártyalap szótár tartalmát.
print(f'sorbarendezés után:\n{self.canvas_kep=}')

def szotart_sorba_rendez(self):
"""A canvas kép szótár elemeit sorba rendezi."""
# Kulcs és érték listák szerint, sorba rendezve.
kulcsok = sorted(self.canvas_kep.keys())
ertekek = sorted(self.canvas_kep.values())
szotar = {kulcsok[i]: ertekek[i] for i in range(len(kulcsok))}

return szotar


if __name__ == '__main__':
kepkeszites = KepKeszito()
kepkeszites.mainloop()

 Remélem adtam ötleteket! Layco

Kártyajátékok létrehozásának vagy játszásának keretrendszere: 

 



Nincsenek megjegyzések:

Megjegyzés küldése