PyQt5: Einbinden einer *.ui-Datei zur Laufzeit des Programms

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Nein, es funktioniert nicht!

Code: Alles auswählen

TypeError: QGuiApplication(list-of-str): not enough arguments
Oder ist das ein Indiz für dich, dass es funktioniert? :roll:


Der Konstruktor von QGuiApplication benötigt ein Argument (in dem Falle sys.argv).
Der Aufruf an exec_() ist nicht korrekt.

Valide wäre folgendes:

Code: Alles auswählen

app = QtGui.QGuiApplication(sys.argv)
gui = RegisterDialog()
gui.show()
sys.exit(app.exec_())
Dafür gibt es zahllose Beispiele im Netz. Hast du denn nicht danach gesucht?
crazyprogrammer
User
Beiträge: 39
Registriert: Sonntag 27. Juli 2014, 19:06

@Madmargitan: Ich meinte mit "Es funktioniert doch eigentlich?", dass 'sys.argv' funktioniert.

Doch, ich habe solche Beispiele im Web gefunden. Aber auch bei diesen gab es immer irgendwelche Probleme, weshalb ich dieses Thema eröffnet habe. Wenn ich nämlich diesen Code ausführe, stürzt 'pythonw.exe' ab:

Code: Alles auswählen

import sys
from PyQt5 import QtGui, QtCore, QtWidgets, uic
     
class RegisterDialog(QtWidgets.QDialog):
    def __init__(self):
        QtWidgets.QDialog.__init__(self)
        # Set up the user interface from Designer.
        self.ui = uic.loadUi("register.ui")

app = QtGui.QGuiApplication(sys.argv)
gui = RegisterDialog()
gui.show()
sys.exit(app.exec_())
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Das liegt nun noch daran, dass QGuiApplication nicht für QtWidgets verwendbar ist.
Schau dir dazu am besten die offizielle Qt Dokumentation an, da wird der Unterschied zwischen QGuiApplication und QApplication erläutert.
QGuiApplication
QApplication

Übrigens, wenn ich deinen Code 1:1 übernehme und ausführe, erhalte ich sofort folgenden Fehler: QWidget: Cannot create a QWidget without QApplication
Wenn IDLE das nicht anzeigt, überlege dir vielleicht wirklich ein mal, ob du nicht in einem "einfachen" Editor (Sublime, Notepad++, Scite etc...) arbeiten willst. Dann kannst du deinen Code einfach per Commandozeile ausführen. Die wirft den Fehler nämlich auch aus. ;-)
crazyprogrammer
User
Beiträge: 39
Registriert: Sonntag 27. Juli 2014, 19:06

@Madmargitan: Ich arbeite viel mit Notepad++, aber bei Python hapert es ein wenig. Ich schaffe es irgendwie nicht, aus dem Editor heraus *.py-Files auszuführen. Er will es nicht akzeptieren, wenn ich in das aufgehende kleine Fenster mit dem Titel "Run..." "python.exe" bzw. "pythonw.exe" oder den Pfad zu den Dateien eingebe (es passiert einfach gar nichts).

Zu Qt:
Laut einem Übersetzter der größten Internetsuchmaschine lauten die ersten Zeilen der beiden Sites fast das gleiche. Außerdem sind die Beispiele in C++, was ich auch nicht kann.
Originale:
QGuiApplication Class
The QGuiApplication class manages the GUI application's control flow and main settings.
---
QApplication Class
The QApplication class manages the GUI application's control flow and main settings.
Übersetzungen:
QGuiApplication Klasse
Die QGuiApplication Klasse verwaltet Ablaufsteuerung der GUI-Anwendung und Grundeinstellungen.
---
QApplication Klasse
Die QApplication Klasse verwaltet Ablaufsteuerung der GUI-Anwendung und Grundeinstellungen.
Beide enthalten auch die gleichen Abschnitte, bis auf einige Unterschiede, wie z.B., dass QApplication noch "Public Types" vor "Properties" oder "Public Slots" vor "Signals" als Kapitel besitzt.
Aber ansonsten ist das doch das Gleiche, oder etwa nicht? Wo liegt denn dann der Unterschied, außer das QApplication scheinbar umfangreicher ist?
BlackJack

@crazyprogrammer: Das wird irgendwo in der Erklärung stehen und nicht in den ersten zwei oder drei Zeilen. Um Qt verwenden zu können muss man die Dokumentation verwenden können, und das setzt genug Englisch- und C++-Kentnisse voraus um den Text und die Beispiele zu verstehen.
Antworten