# Utiliser PyGame et Tk ensemble # =============================== # PROGRAMME 3 # ----------- # Dans cette version, les deux fenetre sont ouvertes dès le début et # sont exécutées dans des threads séparés. Elles ne se bloquent pas # l'une l'autre. import pygame import tkinter as tk import threading # Variable globale pour stocker la position de la bille animée pos_vit=[100,100,0.3,-0.5] # Variable contenant les coordonnées des points cliqués liste_points=[] # Animation dans la fenêtre PyGame def animation(screen) : pos_vit[0]+=pos_vit[2] pos_vit[1]+=pos_vit[3] if pos_vit[0]<0 or pos_vit[0]>=screen.get_width() : pos_vit[2]*=-1 if pos_vit[1]<0 or pos_vit[1]>=screen.get_height() : pos_vit[3]*=-1 screen.fill([0,0,0]) pygame.draw.rect(screen,[255,0,0],[pos_vit[0]-4,pos_vit[1]-4,8,8],0) for p in liste_points : pygame.draw.rect(screen,[255,255,0],[p[0]-10,p[1]-10,20,20],0) pygame.display.flip() # Fenetre TK (code de l'ouvrage de Mark Lutz) contenant un bouton qui flashe class Alarm(tk.Frame): def __init__(self, msecs=1000): tk.Frame.__init__(self) self.msecs = msecs self.pack() stopper = tk.Button(self, text='Je suis un vrai bouton!') stopper.pack() stopper.config(bg='navy', fg='white', bd=8) self.stopper = stopper self.repeater() def repeater(self): self.bell() self.stopper.flash() self.after(self.msecs, self.repeater) def main() : # Cette fonction constituera le Thread de Tk def tkthread() : alarm=Alarm() alarm.mainloop() pygame.init() size=[256,256] screen=pygame.display.set_mode(size) # Démarrage du thread tk threading.Thread(target=tkthread).start() while True : event = pygame.event.poll() if event.type == pygame.QUIT: break if event.type == pygame.MOUSEBUTTONDOWN: print(event.dict["button"]) if event.dict["button"] == 1 : liste_points.append(event.dict["pos"]) animation(screen) pygame.quit() main()