PGU-GUI-Programmierung

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
r74
User
Beiträge: 14
Registriert: Montag 15. Dezember 2008, 21:34

Hallo Forum
Ich bin für mein Vorhaben auf pygame angewiesen. Weiter möchte ich gerne ein paar GUI-Elemente verwenden. Dazu bin ich auf pgu gestossen. (pygame funktioniert z.B. nicht mit Tkinter zusammen). Leider bin ich Anfänger und kann mit der sehr kurz gehaltenen pgu-Dokumentation nichts anfangen.

Hier mein bisheriger Code:

Code: Alles auswählen

import pygame
from pygame.locals import *

from pgu import text, gui as pgui

screenSize = (642, 429)
sinList = []

lo = pgui.Container()

class SinWave:
    def __init__(self, freq):
        self.freq = freq

def addSin(arg):
    global sinList
    freq = arg
    w = SinWave(freq.value)
    sinList.append(w)
    sinShow()

def delSin(arg):
    global sinList
    del sinList[arg]
    sinShow()
    
def sinShow():
    global lo
    i = 0
    for w in sinList:
        t = pgui.Label("freq: " + str(w.freq))
        lo.add(t, 50, (i+1)*30)
        b = pgui.Button("del")
        b.connect(pgui.CLICK, delSin, i)
        lo.add(b, 200, (i+1)*30)
        i = i + 1
 
def main():
    pygame.init()
    screen = pygame.display.set_mode(screenSize)
    
    global sinList, lo
    w1 = SinWave(1000)
    sinList.append(w1)
    w2 = SinWave(2000)
    sinList.append(w2)
        
    gui = pgui.App()
    
    t0 = pgui.Label("freq:")
    lo.add(t0, 50, 0)
    i1 = pgui.Input(size = 10)
    lo.add(i1, 100, 0)
    b1 = pgui.Button("add")
    b1.connect(pgui.CLICK, addSin, i1)
    lo.add(b1, 400, 0)

    sinShow()

    gui.init(lo)
    
    while 1:
        for event in pygame.event.get():
            if event.type == QUIT:
                return
            elif event.type == KEYDOWN and event.key == K_ESCAPE:
                return

            gui.event(event)

        screen.fill((250, 250, 250))
        gui.paint(screen)
        pygame.display.flip()

main()

Meine Absicht ist, denke ich, klar. Was nicht schön ist:

1. Beim Hinzufügen einer neuen freq "scrollt" alles nach oben. Ich möchte aber, dass die oberste Zeile (Eingabezeile) fix bleibt und alles neue unten angefügt wird.

2. Beim Löschen eines Eintrags wird die alte Anzeige (logischerweise) nicht gelöscht. Wie kann ich dieses Löschen realisieren?

3. Bin für jede Verbesserung am Code dankbar. Ich bin ein Anfänger
Antworten