ich schreibe zur Zeit eine Gui für pygame.
Das ist mein erstes "richtiges" Projekt und um git ein bisschen zu lernen, hab ich es mal auf bitbucket hochgeladen.
Ich verwende pygame 1.9.2 und python3
Die Platzierung der Widige soll später mit Pfaden und vordefinierten geometrischen Figuren möglich sein
hier mal beispiel.py
Code: Alles auswählen
#!/usr/bin/env python3
"""Gui Test und Beispiel"""
import sys
import pygame
from pygame.freetype import Font, SysFont
from pygame.locals import *
#Import von meingu
import meingu.Gui as Gui
from meingu.locals import *
#init der pygame Umgebung
pygame.init()
buffer = pygame.display.set_mode((600, 600))
pygame.key.set_repeat(1, 1) #sollte immer gesetzt werden
CLOCK = pygame.time.Clock()
#Erstelle ein Standard Font Objekt für die Gui
#Es muss ein freetype Font sein
DEFAULTFONT = SysFont(None, 12)
#Das Haupt Fenster der Gui mit der Größe des ganzen Fensters
interface = Gui.Interface(buffer.get_size())
#Erstellung aller anderen Gui Elemente
container = Gui.Container(size=(160, 160))
color_test = Gui.Color((40, 40), (255, 0, 0))
color_test2 = Gui.Color((40, 40), (0, 255, 0))
text_test = Gui.Text("EXIT", font=DEFAULTFONT, fg=(255, 0, 0),
bg=(255, 255, 255))
image_test = Gui.Image("Test.png")
text_test2 = Gui.Text("Test", font=DEFAULTFONT, bg=(255, 255, 255))
label_test = Gui.Label("Label_test", font=DEFAULTFONT, bg=(255, 255, 255))
entry_test = Gui.Entry(font=DEFAULTFONT)
entry_text = Gui.Text("Entry", font=DEFAULTFONT, fg=(255, 255, 255),
bg=(100, 100, 155))
entry_test2 = Gui.Entry(font=DEFAULTFONT, color=(255, 255, 255))
entry_text2 = Gui.Text("Entry", font=DEFAULTFONT, fg=(255, 255, 255),
bg=(100, 100, 155))
labtestplace = Gui.Label("test place_to", font=DEFAULTFONT,
color=(200, 100, 100), size=(128, 32))
liste = [Gui.Text("das ist text " + str(num), DEFAULTFONT,
fg=(255, 255, 0)) for num in range(0, 6)]
#einstellen der event eingaben
text_test.bind_mouse_event(MOUSEBUTTONUP, 1, sys.exit)
#setzt den Fokus der Gui auf label_test wen es angeklickt wird
label_test.bind_mouse_event(MOUSEBUTTONUP, 1, label_test.activate)
container.bind_mouse_event(MOUSEBUTTONUP, 1, container.activate)
#Ruft eine Funktion auf bei Fokussierung
label_test.bind_event(SET_FOKUS, lambda: print("fokus set at Label_test"))
container.bind_event(SET_FOKUS, lambda: print("fokus set at container"))
#platziert alle Widige die ins Interface sollen
interface.place(container, side="center", anchor="center")
interface.place(image_test, side="topleft", anchor="topleft")
interface.place(text_test2, side="bottomright", anchor="bottomright")
interface.place(label_test, side="bottomleft", anchor="bottomleft")
interface.place(entry_test, side="topright", anchor="topright")
#platziert alle Widige die in den Container sollen
container.place(color_test, side="topleft", anchor="topleft")
container.place(color_test2, side="bottomright", anchor="bottomright")
container.place(text_test, side="center", anchor="center")
container.place(entry_text2, side="bottomleft", anchor="bottomleft")
#platziert labtestplace anliegend an Container in den gleichen Master
Gui.place_too(container, labtestplace)
Gui.place_too(entry_test, entry_text, side="midright", anchor="midleft",
offset=(-2, 0))
Gui.place_too(entry_text2, entry_test2, side="midleft", anchor="midright",
offset=(2, 0))
#platziert die Widige in der liste in einer reihe
Gui.place_in_line(interface, liste, image_test.get_pos("bottomleft"),
offset=(0, 2))
if __name__ == '__main__':
while True:
for event in pygame.event.get():
etype = event.type
if etype == QUIT:
sys.exit()
elif etype == MOUSEMOTION:
#muss immer aufgerufen werden
interface.mousemotion(event.buttons, event.pos, event.rel)
elif etype == MOUSEBUTTONUP:
#muss immer aufgerufen werden
interface.mouse_imput(etype, event.button)
elif etype == MOUSEBUTTONDOWN:
#muss immer aufgerufen werden
interface.mouse_imput(etype, event.button)
if etype == KEYDOWN:
#muss immer aufgerufen werden
interface.key_input(KEYDOWN, event.key, event.unicode)
elif etype == KEYUP:
#muss immer aufgerufen werden
interface.key_input(KEYUP, event.key, None)
if etype == VIDEORESIZE:
pass
buffer.fill((0, 0, 0))
#muss immer aufgerufen werden
interface.update()
interface.draw(buffer)#buffer ist das Surface auf das die Gui zeichnet
past_time = CLOCK.tick(30)
pygame.display.flip()