Haladó Python tkinter Canvas kódok 16 - 20

 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: 
*********************************************************************

17./
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./
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