16./
A Canvas find_closest() metódusa.
import tkinter as tk
class CanvasEvents(tk.Tk):
def __init__(self):
super().__init__()
self.title("Kattintási esemény")
self.canvas = tk.Canvas(self, bg='grey')
self.canvas.pack(expand=1, fill=tk.BOTH)
# Kép készítés
self.kep_open1 = tk.PhotoImage(file='fotok/t03.png')
self.kep_open2 = tk.PhotoImage(file='fotok/p03.png')
self.kep_open4 = tk.PhotoImage(file='fotok/t11.png')
# kép megjelenik
self.canvas.create_image(
100, 100, image=self.kep_open1, tags='tökfilkó')
self.canvas.create_image(
200, 100, image=self.kep_open2, tags='pirosfilkó')
# A tag_bind() metódust használjuk gombkattintáskor
# az objektum_kattintási_esemény() metódus hívására.
self.canvas.tag_bind('tökfilkó', '<Button-1>',
self.objektum_kattintasi_esemeny)
self.canvas.tag_bind('pirosfilkó', '<Button-1>',
self.objektum_kattintasi_esemeny)
def objektum_kattintasi_esemeny(self, event):
"""A vászonobjektumnak van egy find_closest()
nevű metódusa is, amellyel megkereshető az esemény
részeként szereplő képobjektumok, itt az 1-es és 2-es.
Az itemconfigure() a kattintott képobjektum
fotóját lecseréli egy harmadik képre."""
item = self.canvas.find_closest(event.x, event.y)
print(*item, type(*item))
print(f'\nObjektum koordináta: {self.canvas.coords(*item)}')
self.canvas.itemconfigure(*item, image=self.kep_open4)
if __name__ == "__main__":
ablak = CanvasEvents()
ablak.mainloop()
Kártyajátékok létrehozásának vagy játszásának keretrendszere:
*********************************************************************
A Canvas itemkonfigure() metódus paramétere lehet függvény is!
import tkinter as tk
class CanvasEvents(tk.Tk):
def __init__(self):
super().__init__()
self.title("Kattintási esemény")
self.canvas = tk.Canvas(self, bg='grey')
self.canvas.pack(expand=1, fill=tk.BOTH)
# Kép készítés
self.kep_open1 = tk.PhotoImage(file='fotok/t03.png')
self.kep_open2 = tk.PhotoImage(file='fotok/p03.png')
# kép megjelenik
self.canvas.create_image(
100, 100, image=self.kep_open1, tags='tökfilkó')
self.canvas.create_image(
200, 100, image=self.kep_open2, tags='pirosfilkó')
# A tag_bind() metódust használjuk gombkattintáskor
# objektum_kattintási_esemény() metódus hívására.
self.canvas.tag_bind('tökfilkó', '<Button-1>',
self.objektum_kattintasi_esemeny)
self.canvas.tag_bind('pirosfilkó', '<Button-1>',
self.objektum_kattintasi_esemeny)
def objektum_kattintasi_esemeny(self, event):
"""A vászonobjektumnak van egy find_closest()
nevű metódusa is, amellyel megkereshető az esemény
részeként szereplő képobjektum, itt az 1-es és 2-es.
Az itemconfigure() a kattintott képobjektum
fotóját törli."""
item = self.canvas.find_closest(event.x, event.y)
print(f'\nAz {item[0]} Objektum koordináta: '
f'{self.canvas.coords(*item)}')
self.canvas.itemconfigure(int(*item), self.deletes(item))
def deletes(self, item):
self.canvas.delete(item)
if __name__ == "__main__":
ablak = CanvasEvents()
ablak.mainloop()
*********************************************************************
18./
18./
Eseményt vált ki, ha egérrel a képek fölé megyünk, illetve ha eltávolodunk.
import tkinter as tk
from tkinter import Canvas
class CanvasEsemeny(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('300x200+500+100')
self.title("Kilépés - belépés.")
self.canvas = Canvas(self, bg='blue')
self.canvas.pack(expand=1, fill=tk.BOTH)
self.image1 = tk.PhotoImage(file='fotok/m10.png')
image_item1 = self.canvas.create_image((100, 100), image=self.image1)
self.image2 = tk.PhotoImage(file='fotok/z10.png')
image_item2 = self.canvas.create_image((200, 100), image=self.image2)
# csere kép
self.image3 = tk.PhotoImage(file='fotok/p10.png')
# belépés a canvas elembe
self.canvas.tag_bind(image_item1, '<Enter>', self.belepesi_esemeny)
# kilépés a canvas elemből
self.canvas.tag_bind(image_item2, '<Leave>', self.kilepesi_esemeny)
def belepesi_esemeny(self, event):
item = event.widget.find_closest(event.x, event.y)
print(f'Widget száma: {item[0]}')
self.canvas.itemconfigure(item, image=self.image3)
print('Belépési esemény koordináta:', event.x, event.y)
def kilepesi_esemeny(self, event):
item = event.widget.find_closest(event.x, event.y)
print(f'Widget száma: {item[0]}')
self.canvas.itemconfigure(item, image=self.image3)
print('Kilépési esemény koordináta:', event.x, event.y)
if __name__ == "__main__":
windows = CanvasEsemeny()
windows.mainloop()
*********************************************************************
19./
Ezekben a háborús időkben nem árt ha megtanuljuk vezérelni a rakétákat!
import tkinter as tk
class CanvasEsemeny(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('510x510+700+100')
self.title("Event")
self.canvas = tk.Canvas(self, bg='grey', width=500, height=500)
self.canvas.pack(pady=5)
# Képek nyitása
self.nyit = {}
koordinata = [(100, 100), (250, 100), (400, 100)]
fajlok_lista = ['rocket_ény.png', 'rocket_ék.png', 'rocket_dk.png']
for i, elem in enumerate(fajlok_lista):
self.nyit[i] = tk.PhotoImage(
file='fotok/' + elem)
self.canvas.create_image(
koordinata[i], image=self.nyit[0], tags='rakéta')
# A megértés fokozásához!!
print(self.nyit[0]) # pyimage1
self.open4 = tk.PhotoImage(file='fotok/rocket_dny.png')
print('\n', self.open4, '\n') # pyimage4
# Esemény indítások
self.canvas.tag_bind('rakéta', '<Button-1>',
lambda e: self.kattintas_esemeny1())
self.canvas.tag_bind('rakéta', '<Button-3>',
lambda e: self.kattintas_esemeny2())
def kattintas_esemeny1(self):
for item in range(1, 4):
self.canvas.itemconfigure(item, image=self.nyit[2])
def kattintas_esemeny2(self):
for item in range(1, 4):
self.canvas.itemconfigure(item, image=self.nyit[1])
if __name__ == "__main__":
ablak = CanvasEsemeny()
ablak.mainloop()
A rakétát szállította: rocket Icon for Free Letöltés | FreeImages
*********************************************************************
20./
A nyíl irányítása nyíl gombokkal. 👀
import tkinter as tk
from PIL import Image, ImageTk
class IranyitasNyilakkal(tk.Tk):
"""Vezérlés a nyíl billentyűkkel."""
def __init__(self):
super().__init__()
self.geometry("700x350")
self.config(bg='blue')
self.canvas = tk.Canvas(self, width=600, height=400, bg="orange")
self.canvas.pack(fill='both', expand=True)
self.imageB = ImageTk.PhotoImage(Image.open('kepek/nyilB.png'))
self.imageJ = ImageTk.PhotoImage(Image.open('kepek/nyilJ.png'))
self.imageF = ImageTk.PhotoImage(Image.open('kepek/nyilF.png'))
self.imageL = ImageTk.PhotoImage(Image.open('kepek/nyilL.png'))
self.canvas.create_image((250, 120), anchor='nw',
image=self.imageB, tags='nyil')
self.bind("<Left>", lambda e: self.left())
self.bind("<Right>", lambda e: self.right())
self.bind("<Up>", lambda e: self.up())
self.bind("<Down>", lambda e: self.down())
def left(self):
self.canvas.itemconfigure(1, image=self.imageB)
x = -20
y = 0
self.canvas.move('nyil', x, y)
def right(self):
self.canvas.itemconfigure(1, image=self.imageJ)
x = 20
y = 0
self.canvas.move('nyil', x, y)
def up(self):
self.canvas.itemconfigure(1, image=self.imageF)
x = 0
y = -20
self.canvas.move('nyil', x, y)
def down(self):
self.canvas.itemconfigure(1, image=self.imageL)
x = 0
y = 20
self.canvas.move('nyil', x, y)
if __name__ == '__main__':
win = IranyitasNyilakkal()
win.mainloop()
# Layco
Nyíl készítő: https://www.vecteezy.com/png/9266420-arrow-icon-design
*********************************************************************
Következő oldal: https://teljesenkezdo.blogspot.com/p/halado-python-tkinter-canvas-kodok-21.html
Nincsenek megjegyzések:
Megjegyzés küldése