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