1./
Egy játék kód, haladó Canvast ismerőknek.
Játszani bárkinek.
import random
import tkinter as tk
class Teglafal(tk.Canvas):
"""Hány kattintásból találod meg a fekete téglát?"""
def __init__(self, parent, **kwargs):
super().__init__(parent, **kwargs)
# A vászon mérete, színe
self.configure(width=700, height=250)
# Egy fekete tégla koordináta
self.koordinata = None
# Kattintás számláló
self.szamlalo = 0
koordinatak = []
# Téglák készítése
for j in range(4):
for i in range(10):
self.create_rectangle(
i * 70 + 10, j * 60 + 10, i * 70 + 60, j * 60 + 50,
fill="#AB5250",
tags=f"square_{j}_{i}")
# A téglák koordinátáit listába gyűjti
koordinatak.append(
[i * 70 + 10, j * 60 + 10, i * 70 + 60, j * 60 + 50])
# Egy tégla véletlen választás
self.koordinata = random.choice(koordinatak)
# Választott tégla fekete színű
self.create_rectangle(self.koordinata, fill='black', tags="fekete")
# A fekete téglát piros tégla alá rejti
self.tag_lower("fekete")
# Kattintás a téglákra
self.bind("<Button-1>", lambda e: self.click())
def click(self):
# A kattintások feldolgozása
currently_clicked = self.find_withtag("current")
katt = self.gettags("current")
if currently_clicked:
# törli a kattintott téglát
self.delete(katt[0])
# számolja a próbálkozást
self.szamlalo += 1
print(self.szamlalo)
class App(tk.Tk):
def __init__(self):
super(). __init__()
self.title('Fekete tégla kereső játék')
# A **kwargs két opciója szín és keret vastagság
teglafal = Teglafal(self, bg='lightgreen', highlightthickness=0)
teglafal.pack()
if __name__ == '__main__':
app = App()
app.mainloop()
# letöltés
https://onlinegdb.com/fVgFvA1Zw
*********************************************************************
2./
Kép elforgatása 90°-kal. Alkalmas 180 és 270 fokra is.
A következő képet forgatom el, mérete 81x128 pixel:
import tkinter as tk
from PIL import Image, ImageTk
class KepDontes90(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('300x300')
self.config(bg='orange')
# A kép eredeti mérete szélesség=81, magasság=128 pixel.
# A kép méretét 90°-kal elforgatott állapotra konfigurálom.
# A Canvas zöld hátterét -2 pixellel tüntettem el,..
# ...vagy bg='white'.
self.canvas = tk.Canvas(self, width=128-2, height=81-2,
bg='green')
self.canvas.place(x=0, y=0)
# Kép megnyitás
self.kep_open = Image.open("images/m2.png")
# Kép készítés
self.foto = ImageTk.PhotoImage(self.kep_open)
# Kép megjelenítés
self.kepelem = self.canvas.create_image(0, 0,
image=self.foto,
anchor='nw')
# Kép elforgatás
self.elforgatas = self.kep_open.rotate(90, expand=True)
# Elforgatott kép
self.forgatott_foto = ImageTk.PhotoImage(self.elforgatas)
# A canvas elem újra konfigurálása az elforgatott fotóval.
self.canvas.itemconfig(self.kepelem,
image=self.forgatott_foto)
if __name__ == '__main__':
kepdontes = KepDontes90()
kepdontes.mainloop()
Kártyajátékok létrehozásának vagy játszásának keretrendszere: https://pypi.org/project/deckcards/
*********************************************************************
3./
Kép áthelyezése bal gomb kattintásra, új helyre a tkinter ablakban.
import tkinter as tk
from PIL import Image, ImageTk
class Athelyezes(tk.Canvas):
def __init__(self, parent):
super().__init__(parent)
self.configure(width=400, height=200, bg='blue')
# Kép megnyitása
self.image = Image.open('images/m2.png').resize((81, 128))
self.photo = ImageTk.PhotoImage(self.image)
# Kép megjelenítése
self.i = self.create_image((0, 0), anchor="nw",
image=self.photo)
# Egér bal gomb kattintásra függvény hívás
self.bind('<Button-1>', lambda e: self.updates())
def updates(self):
# A képet új koordinátákra helyezi
self.coords(self.i, 200, 50)
class App(tk.Tk):
def __init__(self):
super().__init__()
a = Athelyezes(self)
a.pack()
if __name__ == '__main__':
app = App()
app.mainloop()
*********************************************************************
4./
Label nyitva! Label lezárva!
import tkinter as tk
class Tabla(tk.Canvas):
def __init__(self, container):
super().__init__(container)
self.configure(width=300, height=300)
self.configure(bg='blue')
self.label = tk.Label(self, text='Kattints rám!', bg='green',
font='tahoma 12', fg='white')
self.label.bind('<Button-1>', lambda e: self.on_label_click())
self.label.pack(padx=20, pady=(20, 10))
self.button = tk.Button(self, text='Címke állapotának váltása',
bg='yellow', font='tahoma 12', fg='grey')
self.button.bind('<Button-1>', lambda e: self.on_button_click())
self.button.pack(padx=20, pady=(10, 20))
def on_label_click(self):
if 'disabled' in self.label.config('state'):
self.label.configure(bg='red')
print('A label lezárva!')
else:
self.label.configure(bg='green')
print('A label nyitva!')
def on_button_click(self):
if 'disabled' in self.label.config('state'):
self.label.config(state='normal', bg='green')
else:
self.label.config(state='disabled', bg='red')
class App(tk.Tk):
def __init__(self):
super().__init__()
tabla = Tabla(self)
tabla.grid()
if __name__ == "__main__":
app = App()
app.mainloop()
*********************************************************************
5./
A kattintott kép mozgatása. Képek ciklusban megjelenítve.
A kártyalapok mérete szélesség: 88-91 pixel, magasság: 128 pixel
import tkinter as tk
class CardCall(tk.Tk):
"""Kép mozgatása új helyre. Kártya hívás."""
def __init__(self):
super().__init__()
self.canvas = tk.Canvas(self, width=600, height=400, bg="black")
self.canvas.pack(padx=5, pady=5)
# kép fájlok nevei.
kepek = ['asz.png',
'dama.png',
'jumbo.png',
'kiraly.png',
'asz2.png']
vizszintes_tav = 50
self.lap_lista = {} # Kep0, kep1, kep2, kep3, kep4
# képek megnyitása, megjelenítése ciklusban,loop.
for j in range(5):
self.lap_lista[j] = tk.PhotoImage(file='kepek/'+kepek[j])
self.canvas.create_image(10+vizszintes_tav, 10,
image=self.lap_lista[j],
anchor='nw', tags=f'kep{j}')
vizszintes_tav += 50
# Kattintási esemény kezelő
self.bind('<Button-1>', lambda e: self.click())
def click(self):
""" 'current' = egy vagy több objektumot határoz meg a vásznon.
'kattintas_most' = aktuális objektum azonosító, egész szám."""
kattintas_most = self.canvas.find_withtag("current")
print('sorszám:', *kattintas_most)
katt = self.canvas.gettags("current")
print('index:', katt)
# A kapott indexű kép mozgatása új koordinátákra.
if kattintas_most:
# a kattintottt kép vízszintes koordináta megszerzése
levonas = (kattintas_most[0]*50)
# Bármelyik kattintott kép azonos helyre mozog.
self.canvas.move(katt[0], 300-levonas, 200)
# Az első kép áthelyzése után a többi kép zárva.
self.canvas.config(state='disabled')
if __name__ == '__main__':
kartya_hivas = CardCall()
kartya_hivas.mainloop()
# Képek: https://www.pngegg.com/
Kártyajátékok létrehozásának vagy játszásának keretrendszere: https://pypi.org/project/deckcards/
*********************************************************************
6./
A Canvas összes opciója.
import tkinter as tk
class Opciok(tk.Tk):
def __init__(self):
super().__init__()
canvas = tk.Canvas(self, bg='blue')
canvas.pack()
print('\nA Canvas összes opciója.')
print(canvas.config().keys())
print('\n')
for options in canvas.config():
print(options + "=" + str(canvas[options]))
if __name__ == '__main__':
opciok = Opciok()
opciok.mainloop()****************************************************************************
7./
Képre kattintáskor törli a fotót.
import tkinter as tk
class ImageDeletion(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('200x200+500+100')
self.title('Képtörlés')
canvas = tk.Canvas(self, width=190, height=190, bg='blue')
canvas.pack(anchor=tk.CENTER, expand=True)
self.image = tk.PhotoImage(file='photos/m7.png')
appear = canvas.create_image((100, 100), image=self.image)
# Képre kattintásra törli a fotót.
canvas.tag_bind(appear, '<Button-1>',lambda e: canvas.delete(appear))
if __name__ == '__main__':
delete_image = ImageDeletion()
delete_image.mainloop()Kártyajátékok létrehozásának vagy játszásának keretrendszere: https://pypi.org/project/deckcards/****************************************************************************
8./
A tags="valami" azaz címke példakód.
import tkinter as tk
from tkinter import ttk
class Torles(tk.Canvas):
def __init__(self, parent, **kwargs):
super().__init__(parent, **kwargs)
self.configure(width=500, height=400, bg='#B9AAA3')
self.img = tk.PhotoImage(file="kep5/m7.png")
self.create_image(20, 20, anchor=tk.NW,
image=self.img, tags='kep')
self.create_rectangle(280, 70, 400, 100,
fill="red", tags="tégla")
self.create_oval(150, 150, 50, 50,
fill="blue", tags="kör")
self.create_rectangle(150, 50, 250, 150,
fill="grey", tags="négyzet")
self.create_text(180, 250, font="Times 20",
text="Négyzet, kör és téglalap"
"\n a vásznon belül",
tags='txt')
self.btn1 = ttk.Button(
text='kép törlés', command=lambda: self.delete("kep"))
self.btn1.place(x=400, y=200)
self.btn2 = ttk.Button(
text='négyzet törlés', command=lambda: self.delete("négyzet"))
self.btn2.place(x=400, y=250)
self.btn3 = ttk.Button(
text='kör törlés', command=lambda: self.delete("kör"))
self.btn3.place(x=400, y=300)
self.btn4 = ttk.Button(
text='mindent töröl', command=lambda: self.delete("all"))
self.btn4.place(x=400, y=350)
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('520x420')
stilus = ttk.Style()
stilus.theme_use('alt')
stilus.configure('TButton', font="Times 12",
background='#A9CABA')
t = Torles(self)
t.place(x=10, y=10)
if __name__ == '__main__':
app = App()
app.mainloop()
****************************************************************************
9./
A kép, képek koordinátáinak a megszerzése:
példa a.:
import tkinter as tk
root = tk.Tk()
root.geometry('300x200')
canvas = tk.Canvas(root, width=600, height=400, background='green')
canvas.pack(anchor=tk.CENTER, expand=True)
image = tk.PhotoImage(file='kepek/m11.png')
a = canvas.create_image((100, 100), image=image)
print("Kép x, y koordináta:", canvas.coords(a))
root.mainloop()
# Kép x, y koordináta: [100.0, 100.0]Példa b.:
import tkinter as tk
root = tk.Tk()
root.geometry('300x200')
canvas = tk.Canvas(root, width=600, height=400, background='green')
canvas.pack(anchor=tk.CENTER, expand=True)
image = tk.PhotoImage(file='kepek/m11.png')
canvas.create_image((100, 100), image=image, tags='kep')
print("Kép x, y koordináta:", canvas.coords('kep'))
root.mainloop()
# Kép x, y koordináta: [100.0, 100.0]
Példa c. több képpel:import tkinter as tk
root = tk.Tk()
root.geometry('300x200')
canvas = tk.Canvas(root, width=600, height=400,
background='green')
canvas.pack(anchor=tk.CENTER, expand=True)
kepek_nevei = ['kepek/m11.png', 'kepek/t10.png', 'kepek/z3.png']
kepek = {}
jobbra = 0
for i in range(len(kepek_nevei)):
kepek[i] = tk.PhotoImage(file=kepek_nevei[i])
canvas.create_image((100+jobbra, 100),
image=kepek[i], tags='kep' + str(i))
jobbra += 50
# print('kep' + str(i))
for j in range(len(kepek)):
print(f"A {j}. kép koordináta:", canvas.coords('kep' + str(j)))
root.mainloop()
# A 0. kép koordináta: [100.0, 100.0]
# A 1. kép koordináta: [150.0, 100.0]
# A 2. kép koordináta: [200.0, 100.0]Kártyajátékok létrehozásának vagy játszásának keretrendszere:Folytatás a következő oldalon: Haladó Python tkinter Canvas kódok 10 - 15.
Nincsenek megjegyzések:
Megjegyzés küldése