Gibt es gute UI-Widget-Toolkits für Pygame? [geschlossen]

8

Gibt es gute, moderne Widget-Toolkits für Pygame? Ich habe mir PGU angesehen , aber es ist anscheinend nicht gewartet.

Nathon
quelle

Antworten:

11

Nein. Jedes Jahr erstellt jemand eine neue Pygame-UI-Bibliothek und gibt sie nach einigen Versionen wieder auf, wahrscheinlich sobald er feststellt, dass das Schreiben von Schaltflächenlayouts einfach ist, das Schreiben einer vollständigen UI-Bibliothek jedoch echte Arbeit ist. Das guiTag auf der Pygame-Site zeichnet einige davon auf.


quelle
8

Im Januar 2011 habe ich mir fünf GUI-Toolkits für Pygame angesehen und versucht, alle mit Python 3 zum Laufen zu bringen. Die fünf waren: Albow, GooeyPy, PGU, pqGUI und sgc.

Mit GooeyPy war ich nicht erfolgreich , aber die anderen vier konnten mit Python 3 arbeiten. (Ich wollte auch Poutine von Shandy Brown ausprobieren, konnte es aber nicht finden und habe Ocemp völlig übersehen.)

Leider scheinen Albow und Ocemp ziemlich tot zu sein. Albow wurde zuletzt im Jahr 2009 und Ocemp zuletzt im Jahr 2008 aktualisiert. (Beachten Sie, dass die Version von Albow auf pygame.org nicht die neueste ist.)

PGU (Phils Pygame Utilities) wurde von Peter Rogers übernommen und gewartet, und Victor Kam hat das meiste davon auf Python 3 konvertiert. Es wurde zuletzt im Januar 2012 aktualisiert und ist vermutlich verbessert, seit ich es untersucht habe. (Beachten Sie, dass die Version von PGU auf pygame.org nicht die neueste ist.)

sgc war neu und immer noch sehr unvollständig, als ich es mir ansah. Es wird jedoch derzeit aktiv entwickelt und könnte inzwischen erheblich verbessert werden. (Beachten Sie, dass die Version von sgc auf pygame.org nicht die neueste ist.)

Ich ließ jeden der fünf durch einen einfachen Codezeilen-Zähler laufen, um ihre Größe zu messen:

Dies waren die Ergebnisse (im Januar 2011):

    Albow-Code min = 2810, max = 4551 (max = 162% von min)
    Albow \ Demo min = 453, max = 649

    GooeyPy \ gooeypy min = 2034, max = 3941 (max = 194% von min)
    GooeyPy \ examples min = 178, max = 351

    pgu \ pgu min = 2910, max = 7047 (max = 242% von min)
    inkl. pgu \ pgu \ gui min = 1678, max = 4638 (max = 276% von min)
    pgu \ examples min = 822, max = 2527

    pqGUI.py min = 1586, max = 1834 (max = 116% von min)
    Beispiel.py min = 178, max = 225

    sgc (unvollständig) min = 889, max = 1243 (max = 140% von min)

In jedem Fall ist die "min" -Nummer repräsentativer für die "Größe" des Toolkits, da Leerzeichen und Kommentare nicht berücksichtigt werden. Wenn die "max" -Nummer sehr nahe an der min-Zahl liegt, bedeutet dies, dass der Code nicht viele Leerzeichen und nicht viele Kommentare enthält. pqGUI veranschaulicht dies, weil es fast keine Kommentare enthält (und auch keine Docstrings), was zu schade ist, weil es (IMO) die am besten aussehenden GUI-Elemente gemacht hat.

Wichtige Einschränkung: Docstrings werden nicht als Kommentare gezählt! Das macht PGU, sgc & GooeyPy, die Docstrings haben, dicker und weniger gut dokumentiert als sie wirklich sind, im Vergleich zu Albow und pqGUI, denen Docstrings fehlen.

Ich mochte pqGUI, weil mir das Aussehen der Widgets gefallen hat, aber es wird nicht unterstützt und ist nicht dokumentiert, und ich konnte den Autor nicht finden.

Von den fünf war die PGU ab Januar 2011 klarer Marktführer. Aber ich war mit allen fünf unzufrieden, also schrieb ich meine eigenen. (Hinweis: PGU & sgc wurden beide aktualisiert und vermutlich verbessert, seit ich sie mir angesehen habe.)

Laut Joe Wreschnigs ironischer Beobachtung (oben) ist mein GUI-Toolkit wie alle anderen unvollständig. Aber es gibt ein paar Dinge zu tun.

  • Es funktioniert mit Python 2.6, 2.7, 3.1, 3.2 und vermutlich 3.3.
  • Es basiert auf Sprites und verwendet Pygame-Ereignisse für die Kommunikation, sodass es problemlos in ein vorhandenes Pygame-Programm eingefügt werden kann, ohne die Ereignisschleife zu übernehmen. Widgets werden von pygame.sprite.Sprite in Unterklassen unterteilt.
  • Es unterstützt Formulare, Schaltflächen, Kontrollkästchen, modale und nicht modale Meldungsfelder und Dialogfelder, vertikale Menüs, Texteingabefelder und Schieberegler (Bildlaufleisten).
  • Überlappende Steuerelemente / Widgets, Verschieben und Ändern der Größe von Widgets und Formularen in Formularen werden problemlos verarbeitet.

Es fehlen jedoch einige wichtige Steuerelemente, die Sie wahrscheinlich benötigen, z. B. Dialogfelder zum Öffnen / Kombinieren von Dateien und Tabellen. Die vorhandenen Steuerelemente sehen gut aus, aber Funktionen wie Titelleisten und Bildlaufleisten sind eine feste Anzahl von Pixeln und keine einstellbare Breite. Der Code ist gut kommentiert und es gibt eine Demo-App mit Verwendungsbeispielen, aber es gibt keine ordnungsgemäße Dokumentation zur Verwendung. Außerdem ist es Pre-Beta, so dass sich alles ändern kann.

Die Ergebnisse des Code-Zählers dafür sind:

    DavesGUI (mit Demo-Code) min = 2267, max = 3055 (max = 135% von min)
     (ohne Demo-Code) min = 2018, max = 2644 (max = 131% von min)
     (w / docstrings auskommentiert) min = 1442, max = 2644 (max = 183% von min)

Wenn jemand es trotz dieser Einschränkungen ausprobieren möchte, kontaktieren Sie mich per E-Mail. Fragen Sie nach "DavesGUI". Meine E-Mail-Adresse lautet hier: http://www.burtonsys.com/email/

Dave Burton
quelle
1

Ich habe kürzlich gesehen, dass Pygtk mit Pygame verwendet wird und es funktioniert wirklich gut. Stellen Sie einfach sicher, dass Sie das Expose-Ereignis mit dem gtk-Zeichenbereich-Widget verwenden und die Pygame-Daten bei jedem Durchlauf durch die gtk-Hauptschleife aktualisieren. Wenn Sie möchten, dass ein vollwertiges GUI-Toolkit innerhalb von Pygame funktioniert, wird dies nicht passieren. Wenn Sie jedoch möchten, dass ein vollwertiges GUI-Toolkit mit Pygame verwendet wird, haben Sie Glück, pygtk ist es. Sie können gtk sogar mit der Programmiersprache C verwenden und dennoch Pygame als Widget in den Zeichenbereich importieren und Pygame in Python aktualisieren, wenn dies Ihr Boot schwimmt und Sie eine turbogeladene Geschwindigkeit wünschen. Warum die Aufregung, verwenden Sie einfach Google und finden Sie die Antwort, dann implementieren Sie sie, nicht schwer und nicht groß. Pygame ist übrigens echt cool. Diese Leute haben so viel Arbeit investiert, und es funktioniert so effizient, dass es erstaunlich ist.

kong
quelle
0

Ich habe meiner GameEngine-Bibliothek sehr grundlegende GUI-Elemente hinzugefügt: http://aharrisbooks.net/pythonGame/ch10/ (In einem Buch über die Spieleentwicklung in Python enthalten)

Ich habe sehr einfache GUI-Elemente basierend auf dem Standard-Sprite erstellt: eine Beschriftung, eine Schaltfläche, eine mehrzeilige Beschriftung und eine Mini-Bildlaufleiste.

Diese Tools sind recht einfach, aber für viele Zwecke geeignet. Natürlich ist die Bibliothek vollständig Open Source, Sie können sie also jederzeit ändern, wenn Sie dies wünschen. Das einzige Element der Benutzeroberfläche, das ich (noch) nicht hinzugefügt habe, war ein Texteingabe-Widget. Das liegt daran, dass das Ereignismodell dafür viel komplexer ist als die anderen Modelle, und ich hatte eine Frist.

Fühlen Sie sich frei, damit zu spielen (ob Sie das Buch verwenden oder nicht) und lassen Sie mich wissen, wenn Sie auf Probleme stoßen. Ich werde versuchen zu helfen.

Ich habe Videos meines Kurses unter http://synapse.cs.iupui.edu/Mediasite/Catalog/ verfügbar.

Schauen Sie sich den N451-Kurs an. Das ist die zur Spieleentwicklung.

Zwei pi
quelle
"Ja wirklich?" "Das eine Benutzeroberflächenelement"? Was ist mit Bäumen, Listen, Menüleisten, Schiebereglern, Fortschrittsbalken, Spinnern, Kombinationsfeldern, Fenstern mit veränderbarer Größe, veränderbaren Fenstern, Rich-Text-Widgets und Registerkarten, um nur einige zu nennen? Ihre Bibliothek unterscheidet sich nicht von dem halben Dutzend anderer ebenfalls nie fertiggestellter auf pygame.org.
Beeindruckend. Das war ein bisschen wütend, oder? Das ist das einzige Benutzerelement, das ich nicht hinzufügen möchte. Ich kann alles bauen, was ich will. Ich habe die anderen Dinge nicht gebaut, weil ich sie nicht brauche. Sie können Ihrem Framework (das erweiterbar ist) Ihre eigenen Tools hinzufügen oder Ihr eigenes Toolkit erstellen. Wenn Sie mich bei der Fertigstellung dieses Projekts unterstützen möchten, bin ich bereit, darüber zu sprechen. Wie die meisten Entwickler muss ich jedoch die Rechnungen bezahlen, damit die Projekte, von denen ich meinen Lebensunterhalt verdienen kann, die höchste Priorität haben.
Zwei pi
Es ist nicht böse. Ich möchte nur darauf hinweisen, dass Ihr Projekt nicht anders ist als PyUI oder PGU. Es ist eine nicht gepflegte API zum Anordnen einfacher Schaltflächen. Es ist kein "gutes, modernes Widget-Toolkit".
Ich stimme Ihnen zu, dass die gesamte Bibliothek nicht existiert (und ich dachte, die anderen wären zu komplex). Ich denke, die Antwort ist, dass Sie die gewünschte Bibliothek erstellen, anstatt die Bemühungen derer abzulehnen, die ihre Bibliothek frei gegeben haben Arbeit für die Gemeinschaft. Meine Bibliothek ist zugegebenermaßen winzig, weil ich sonst nichts brauchte. Ich würde es lieben, wenn Sie dieser oder einer anderen Bibliothek die gewünschten Funktionen hinzufügen möchten, da ich der Meinung bin, dass eine vollwertige GUI-Bibliothek nützlich sein könnte. Spiele haben jedoch normalerweise nicht die gleichen Anforderungen wie andere GUI-Apps.
Zwei pi