import pygame from pygame.locals import * import os import sensor import time media_path = "./media" images = {} def load_image(filename, convert=False, alpha=False, reload=False): if filename in images and not reload: return images.get(filename) filepath = os.path.join(media_path, filename) image = pygame.image.load(filepath) if convert: if alpha: image.convert_alpha() else: image.convert() images[filename] = image return image def blit_cursor(screen, cursor): cursrect = cursor.get_rect() cursrect.center = pygame.mouse.get_pos() screen.blit(cursor, cursrect.topleft) def out(sensor, event): print "Ueber Button bewegt,", sensor def clicked(sensor, event): print "Button geklickt", sensor, " - target:", sensor.target class QuitButton(sensor.Sensor): def __init__(self, parent, surf, **kw): if not "name" in kw: kw["name"] = "Quitbutton" sensor.Sensor.__init__(self, parent=parent, **kw) self.surf_dict = self.split_surf(surf) self.target = self.surf_dict["normal"] def split_surf(self, surf): rect = surf.get_rect() halfheight = rect.height/2 quit_buttons = {"normal":surf.subsurface(Rect(0, 0, rect.width, halfheight)), "hover":surf.subsurface(Rect(0, rect.height-halfheight, rect.width, halfheight))} return quit_buttons def mouse_enter(self, sensor): self.target = self.surf_dict["hover"] def mouse_leave(self, sensor): self.target = self.surf_dict["normal"] def mouse_drag(self, sensor, event=None): self.move_offset(event.rel) def mouse_button_down(self, sensor, event=None): if event.button == 1: self.lift() if event.button == 3: pygame.quit() raise SystemExit def main(): pygame.init() clock = pygame.time.Clock() background = load_image("bg.jpg", convert=False) screen = pygame.display.set_mode(background.get_rect().size) cursor = load_image("cursor.gif", alpha=True) button = load_image("button.jpg") quit_button_surf= load_image("quit_button.gif") desktop = sensor.Sensor(name="main", rect=screen.get_rect()) button_sensor = sensor.Sensor(parent=desktop, name="button", offset=(50, 50), target=button) button_sensor.mouse_button_down = clicked button_sensor.mouse_motion = out quit_button = QuitButton(parent=desktop, surf=quit_button_surf, offset=(200, 200)) quit_button2 = QuitButton(parent=desktop, surf=quit_button_surf, name="Quitbutton 2", offset=(100, 300)) background.convert() pygame.mouse.set_visible(False) while True: #diff = pygame.mouse.get_rel() clock.tick(40) screen.blit(background, (0, 0)) screen.blit(button, button_sensor.rect) for widget in desktop.collect_stack(): if widget in (quit_button, quit_button2): screen.blit(widget.target, widget.rect) blit_cursor(screen, cursor) events = pygame.event.get() desktop.check(events) pygame.display.flip() for event in events: if event.type == QUIT: exit() if __name__ == "__main__": main()