Moin.
Bin dabei eine Button Class zu erstellen um auf flexible Art und Weise eben Schaltflächen zu erstellen und diese zu behandeln.
Mein Problem ist das definieren einer Action bzw Funktion die beim Klicken auf den jeweiligen Button ausgeführt werden soll ![]()
Also das python2 Grundgerüst sieht wie folgt aus:
=> http://codepad.org/d8FWbE5L
[code=php]
from sys import exit
from pygame.locals import *
import pygame
class Button:
hovered = False
def __init__(self, _font=None, fontsize=21, text="", pos=(0, 0), func=None, screen=None):
try:
self.font = pygame.font.Font(_font, fontsize)
except:
self.font = pygame.font.SysFont(_font, fontsize)
self.function = func
self.screen = screen
self.text = text
self.pos = pos
self.default_color = (100, 100, 100) #gray
self.hover_color = (255, 255, 255) #white
self.set_rect()
self.draw()
def draw(self):
self.set_rend()
pygame.display.update( self.screen.blit(self.rend, self.rect) )
def get_color(self):
if self.hovered:
return self.hover_color # white
else:
return self.default_color # gray
def set_rend(self):
self.rend = self.font.render(self.text, True, self.get_color())
def set_rect(self):
self.set_rend()
self.rect = self.rend.get_rect()
self.rect.topleft = self.pos
def action(self): # FIXME!
eval( self.func )
if __name__ == '__main__':
buttonHover = True
FPS = 30
width = 640
height = 480
# colors R G B
white = (255, 255, 255)
red = (255, 0, 0)
green = ( 0, 255, 0)
blue = ( 0, 0, 255)
black = ( 0, 0, 0)
cyan = ( 50, 255, 255)
magenta = (255, 0, 255)
yellow = (255, 255, 0)
orange = (255, 127, 0)
gray = (100, 100, 100)
size = (width, height)
try:
pygame.init()
window = pygame.display.set_mode(size)
window.fill(black)
buttons = [
Button(text="Start", _font="droidsans", fontsize=42, pos=(30, 0), screen=window),
Button(text="Stop", _font="droidsans", fontsize=42, pos=(30, 60), screen=window),
]
clock = pygame.time.Clock()
while True:
clock.tick(FPS)
for event in pygame.event.get():
if event.type in (QUIT, KEYDOWN):
exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
for button in buttons:
if button.rect.collidepoint(pygame.mouse.get_pos()):
print button.text
if buttonHover:
for button in buttons:
if button.rect.collidepoint(pygame.mouse.get_pos()):
button.hovered = True
button.draw()
else:
button.hovered = False
button.draw()
except (KeyboardInterrupt, SystemExit):
print 'Quit'
pygame.quit()
[/php]
"action" wäre das womit ich noch Probleme habe - das was da steht war nur ein verzweifelter Versuch.... Ich möchte da halt eine Function definieren können - nur wie? :s
Der Rest funktioniert soweit super; beim Klicken auf einer der Schaltflächen wird auch der jeweils passende Text ausgegeben.
Beim erstellen der Button Objekte fehlt noch die Übergabe von "func"
Weiß jemand wie ich das lösen kann?