GUI mit PyGame

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
tsaG
User
Beiträge: 14
Registriert: Samstag 22. August 2015, 00:20

Hi,

Ich möchte für meinen Raspberry eine Kontroll Software erstellen, diese beinhaltet eine GUI. Da das Programm recht schnell starten sollte möchte ich das ganze ohne einen XServer machen und bin dabei auf Pygame gekommen.

Nun habe ich etwas angefangen und bemerkt das es schon recht begrenzt ist.

Ich würde gerne ein "Kuchendiagramm" Zeichnen, jedoch sieht es nicht ganz so schön aus. Zwischendurch sind kleine Streifen zu sehen.

Wenn mein Wert sich in diesen Graphen verkleinert, sollte er normalerweise mit schwarz überzeichnet werden, es bleiben jedoch noch ein paar kleine Streifen stehen. (siehe Voltage) :(

Gibt es vielleicht noch ein anderes Framework mit dem es sich so komfortabel (oder sogar komfortabler) wie mit Python entwickeln lässt, jedoch schon etwas umfangreicher ist (im Sinne von Zeichenmöglichkeiten)?

Es gibt leider Zahlreiche Frameworks mit sehr schönen Oberflächen, jedoch benötigen die meisten wohl einen X-Server :(

Hier mein Code:

drawDigitalGauge(20, 235, GREEN, 0.7, 200, "Test3")

Code: Alles auswählen

def drawDigitalGauge(x, y, color, value, text, name):
    pygame.draw.rect(screen, BLACK, (x+55,y+25,55,30),0) #Blank old Textbox 
    pygame.draw.arc(screen, WHITE, (x,y,110,110), radToDeg(150), radToDeg(360), 2)

    pygame.draw.arc(screen, BLACK, (x+5,y+5,100,100), radToDeg(150), radToDeg(360),50) # Blank old Graph
    pygame.draw.arc(screen, GREY, (x+5,y+5,100,100), radToDeg(150)+radToDeg(210*(1-value)), radToDeg(360),50)
    pygame.draw.rect(screen, WHITE, (x+55,y+25,55,30), 1)
    
    text = fontMedium.render(str(text), 1, color)
    screen.blit(text , (x+55+ ((55 - text.get_width())/2), y+30))
    
    screen.blit(fontMedium.render(str(name), 1, WHITE) , (x,y+8))

Hier das Bild:
https://www.dropbox.com/s/mpy90xvtdryt5 ... t.jpg?dl=0
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@tsaG: Dein pygame scheint Probleme mit dem Zeichnen von Arcs zu haben. Warum zeichnest Du einen Kreisbogen mit Breite 50 und keinen gefüllten Kreisausschnitt? Ich seh gerade, das wird gar nicht unterstützt. Dann solltest Du Dir selbst was aus Polygonzügen zusammenbauen.

Das normale Vorgehen ist es, jedes mal den kompletten Bildschirm neu zu zeichnen, statt nur bestimmte Stellen mit schwarz zu übermalen. Dann hat man nie das Problem, dass irgendwelche alten Reste übrig bleiben.
BlackJack

@tsaG: Anmerkung am Rande `radToDeg()` muss man nicht selbst schreiben, so etwas gibt es schon im `math`-Modul. Und Deine Namensschreibweise folgt nicht dem Style Guide for Python Code.

Hast Du den Zeitunterschied denn mal gemessen die es braucht den X-Server zu starten? Ausgewachsene GUI-Toolkits sind schon eine praktische Sache und man sollte IMHO gut abwägen ob man die Zeit in etwas ”primitives” wie Pygame steckt, also nicht viel mehr als ein Framebuffer, oder ob man sich mit ein klein wenig mehr Startzeit nicht doch lieber ein normales GUI-Rahmenwerk gönnt.

Ansonsten würde ich versuchen die anspruchsvolleren Zeichenoperationen mit Cairo zu machen und mit Pygame anzuzeigen, beziehungsweise kann man wohl mit Cairo auch direkt auf ein PyGame-Surface zeichnen: http://pygame.org/wiki/CairoPygame
Antworten