Haladó Python tkinter Canvas kódok 1- 9.

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