Python 3.6.8 on linux Paquets dépendants: PIL (Pillow 5.1.0)
Il est disponible sur GitHub. Seuls les points seront présentés ci-dessous.
Utilisez les modules Image et ImageTk du package PIL pour afficher les images PNG.
Tout d'abord, je charge un ensemble d'images avec ʻImage.open () . La raison de
resize ()` est que je veux le déplacer sur l'écran tactile de Raspeye à l'avenir, afin que je puisse modifier la taille d'affichage de manière flexible.
app_tk.py
IMG_STAR_OFF = Image.open('image/star_off.png').resize(STAR_SIZE, Image.BILINEAR)
IMG_STAR_ON = Image.open('image/star_on.png').resize(STAR_SIZE, Image.BILINEAR)
L'image chargée est affichée sur le canevas de Tkinter. À ce stade, utilisez le constructeur PhotoImage ()
.
Il semble que l'objet PhotoImage doit être conservé. Il n'était pas affiché lors de l'utilisation d'une variable locale.
La valeur de retour de create_image ()
est l'ID de l'objet sur le canevas. Vous en aurez besoin pour changer d'images ou afficher des animations de rotation pendant le jeu.
app_tk.py
self.canvas = tk.Canvas(self, width=w, height=h)
self.star_img = ImageTk.PhotoImage(IMG_STAR_ON)
self.star_id = self.canvas.create_image(STAR_OFFSET_X,
STAR_OFFSET_Y,
image=self.star_img,
anchor=tk.NW)
Pour changer l'image, créez une nouvelle PhotoImage et utilisez le canevas ʻitemcomfigure () `.
app_tk.py
if tree.is_complete():
self.star_img = ImageTk.PhotoImage(IMG_STAR_ON)
else:
self.star_img = ImageTk.PhotoImage(IMG_STAR_OFF)
self.canvas.itemconfigure(self.star_id, image=self.star_img)
Il n'existe pas de méthode d'animation dans Tkinter, vous pouvez donc mettre à jour l'image régulièrement pour réaliser l'animation. Pour appeler périodiquement le processus, vous pouvez utiliser ʻafter () `, qui est une méthode courante du widget de Tkinter.
app_tk.py
def rotate_cell(self, x, y):
info = self.img_info[x][y]
info.angle -= 15 #Rotation de 15 degrés
info.photo_img = ImageTk.PhotoImage(info.img.rotate(info.angle)) #Créer une image photo pivotée
self.canvas.itemconfigure(info.id, image = info.photo_img) #Remplacer l'image
if info.angle % 90 == 0:
#Animation terminée
#Processus de mise à jour de l'état du jeu, etc.
else:
self.after(15, self.rotate_cell, x, y) #Mettre à jour l'image à nouveau après 15 millisecondes
Vous pouvez placer un widget avec la méthode create_window ()
du canevas. Utilisez Frame si vous souhaitez gérer plusieurs widgets à la fois.
app_tk.py
frame = tk.Frame(self, bg='#e5f8cf', padx=5)
start = tk.Button(frame, text='Start', command=self.start_new_game,
fg='#345834', font=('', 22, 'bold'))
start.pack(side=tk.LEFT, padx=5, pady=10)
self.counter_text = tk.StringVar()
self.counter_text.set('00:00')
self.counter_label = tk.Label(frame, textvariable=self.counter_text,
bg='#e5f8cf', fg='#345834',
font=('', 22, 'bold'))
self.counter_label.pack(side=tk.LEFT, padx=5, pady=10)
self.canvas.create_window(20, 20, window=frame, anchor=tk.NW)
Assignez une méthode de rappel avec bind ()
. L'événement est passé en tant qu'argument à la méthode de rappel et vous pouvez obtenir les coordonnées où l'événement de clic s'est produit dans .x, .y.
app_tk.py
self.canvas.bind('<ButtonRelease-1>', self.on_click_canvas)
def on_click_canvas(self, event):
# event.x, event.Obtenez des coordonnées avec y
x = (event.x - TREE_OFFSET_X) // CELL_LENGTH
y = (event.y - TREE_OFFSET_Y) // CELL_LENGTH
#En traitement
Le chemin électrique peut être décrit comme un labyrinthe commençant à la base de l'arbre. Il existe différents algorithmes pour créer un labyrinthe, mais je l'ai fait à ma manière. Pour faire simple, l'algorithme est le suivant.
Je pense que nous allons faire un parcours de labyrinthe en reliant les carrés du papier carré.
Cela ressemble à ceci lorsque vous faites une vidéo de la façon dont le labyrinthe est terminé.
Je voulais jouer un BGM de Noël, et quand j'ai cherché comment lire un fichier mp3 avec Python, j'ai découvert qu'il y avait un Pygame. Bien sûr, il semble que vous puissiez également afficher des images, alors j'aurais peut-être dû l'utiliser depuis le début ...
Recommended Posts