Fragen zu PyQt5

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Ulrich_G
User
Beiträge: 17
Registriert: Montag 25. Juni 2018, 07:20

Hallo,
ich hätte mal eine generelle Frage zu PyQt5.
Habe mir damit eine passende *.ui Datei erstellt und diese in Python kompiliert:

Code: Alles auswählen

pyuic5 -x firstgui.ui -o firstgui.py
danach den Code der firstgui.py Datei um entsprechende code (z.B. Buttons, Funktionen usw.) erweitert und getestet ... soweit so gut. Funktioniert ganz gut.

Nun stellt sich die Frage:
Was wenn ich jetzt mit dem PyQT5 Designer weiter an meiner Oberfläche arbeite und weitere Elemente hinzukommen.... wie kann ich den bereits bestehenden Code erweitern? Kompiliere ich erneut, ist der Code meiner Ergänzungen natürlich wieder weg. Schöner wäre es nicht jedes mal eine neue firstgui.py erstellen zu müssen sondern lediglich die geänderte firstgui.ui einzulesen. Ist dies überhaupt möglich oder habe ich das Prinzip von PyQt5 noch nicht ganz verstanden?

Danke schon mal

Gruß Ulrich
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Also erst einmal braucht man gar keinen Python-Quelltext erstellen, sondern kann auch die *.ui-Datei zur Laufzeit laden. Wenn man Quelltext erstellt, dann verändert man den *nicht*. Da sollte im Quelltext auch ein Kommentar stehen. Und beide Möglichkeiten werden auch in der PyQt-Dokumentation beschrieben.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Ulrich_G
User
Beiträge: 17
Registriert: Montag 25. Juni 2018, 07:20

Okay das habe ich laut einem Beispiel damit versucht:

Code: Alles auswählen

from PyQt5 import uic, QtWidgets
import sys

class Ui(QtWidgets.QDialog):
    def __init__(self):
        super(Ui, self).__init__()
        uic.loadUi('SomeUi.ui', self)
        self.show()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = Ui()
    sys.exit(app.exec_())
das scheint aber noch nicht zu funktionieren. Die Fehlermeldung lautet: TypeError: ('Wrong base class of toplevel widget', (<class '__main__.Ui'>, 'QMainWindow'))
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast im Qt-Designer ein QMainWindow erzeugt, willst das aber auf einen QDialog anwenden. Das geht natürlich nicht. Baue im Qt-Designer einen Dialog, wenn Du einen Dialog willst.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja, und stimmt doch auch. Du baust ein QMainWindow, aber deine Ui erbt von QDialog. Die muss entweder von QMainWindow erben, oder du aenderst dein .ui-File zu einem Dialog.
Ulrich_G
User
Beiträge: 17
Registriert: Montag 25. Juni 2018, 07:20

okay das war jetzt fast schon peinlich ... danke euch ;-)
Geht !
Ulrich_G
User
Beiträge: 17
Registriert: Montag 25. Juni 2018, 07:20

Welchen Designer würdet ihr mir empfehlen wenn man moderne, zeitgemäße Oberflächen für Python erstellen möchte?
Bin ich mit PyQt5 gut bedient oder gibt es "bessere" für meine Ansprüche.
Ich habe bis vor kurzem meine Applikationen mit VBA erstellt und bin auf der suche nach einer moderneren und flexibleren Gestaltung
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Bei Desktop-GUIs ist man mit Qt gut aufgestellt. Es gibt allerdings Leute die unter moderner, zeitgemässer Oberfläche Webanwendungen verstehen würden.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Designer von Qt ist schon so ziemlich das beste was man bekommt. Mit einer Einschaerkung, die auch fuer VBA gilt: sind VBA oder Qt Oberflaechen "modern und zeitgemaess". Der Trend zu Animationen und gleichzeitig touch-bedienbaren Schnittstellen ist mit den Designern nicht nachvollziehbar. Da gibt es mit QML in Qt und Kivy ganz allgemein fuer Python andere Ansaetze. Die haben aber keine Designer, sondern da kodierst du. Allerdings in beiden Faellen mit einem wie ich finde deutlich ueberlegenen Modell von "properties", also Eigenschaften von Objekten die automatisch eine zwei-wege-Bindung an die GUI haben. Aendert sich das Modell, aendert sich die GUI. Und umgekehrt. Und dann gibt es natuerlich noch Electron, fuer die Freunde von JS. Das erlaubt mit Frameworks wie react, vue oder angular die volle Bandbreite der Browser-GUIs zu Desktopapplikationen zu buendeln. Und die Browser setzten hier klar die Masstaebe.

Ohne muehseliges verknoten von signalen und slots oder callbacks oder was auch immmer. Ob diese Ansaetze dir gefallen musst du natuerlich selbst entscheiden. Falsch machen tust du mit dem Qt5 und seinem Designer jedenfalls nichts.
Ulrich_G
User
Beiträge: 17
Registriert: Montag 25. Juni 2018, 07:20

Vielen Dank . Das hat mir schon mal weiter geholfen.
Werde mir in den nächsten Tage ein paar Ansätze genauer anschauen.
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

__deets__ hat geschrieben: Mittwoch 27. Juni 2018, 10:22 Der Designer von Qt ist schon so ziemlich das beste was man bekommt....Da gibt es mit QML in Qt und Kivy ganz allgemein fuer Python andere Ansaetze. Die haben aber keine Designer, sondern da kodierst du.....
Kivy hat schon einen Designer. Leider ist der zZ. kaum bis gar nicht zu gebrauchen. Da er sehr fehlerhaft und buggy ist und zZ. leider nicht weiterentwickelt wird.
Ich verfolge Kivy und seine Coder auf mehreren Kanälen. In Sachen Designer ist es aber noch sehr Still.

Im Gegensatz zu QT5 und einem QT Designer Studio. Diese News hab ich erst Heute dazu gelesen. Auf Heise.de Qt-Aktualisierte-Runtime-fuer-3D-Studio-und-neues-Produkt-Design-Studio dort wird über das QT Design Studio gesprochen.
Antworten