@Skychaser1971: Ich gehe von dem aus was ich hier in den Beiträgen lesen kann, und da gibt es zwei verschiedene Schreibweisen von diesem Verzeichnis. Und wenn Du den Fehler in den Beiträgen machst, warum solltest Du den nicht auch auf dem eigenen Rechner machen? Ist schliesslich ein Flüchtigkeitsfehler der jedem passieren kann. Mir auch.
Ich habe die Grundindee vermittelt wie man das macht: mit dem `PyQt5.uic`-Modul. Da ist im Grunde *eine* relevante Funktion drin und die ruft man auf. Mit einem Argument — dem Dateinamen. Und eventuell noch einem zweiten, wenn man nicht den Rückgabewert – das Widget was man im Designer erstellt hat — direkt benutzen will, sondern gerne die Attribute davon auf ein anderes Objekt übertragen will. Komplizierter wird das nicht. Und es ist dokumentiert.
Anmerkungen zum gezeigten Quelltext: Mindestens `move()` macht man nicht. Und die Vorgabe einer `geometry()` für das Fenster in der Regel auch nicht. Pixelgenaue Grössen und Positionen funktionieren auf dem Rechner wo man das geschrieben hat, aber nicht allgemein, bei dem Zoo von Bildschirmgrössen, -auflösungen, und -einstellungen. Für die Positionen gibt es `QLayout` & Co und die Grössen ergeben sich automatisch aus dem Inhalt.
Namen sollten keine kryptischen Abkürzungen enthalten, oder gar nur daraus bestehen. Man sollte nicht nur `win` schreiben wenn man `window` meint. Dann hat man eine ”Kollision” mit der `window()`-Funktion, die eigentlich nicht sein müsste, denn Funktionen und Methoden werden üblicherweise nach den Tätigkeiten benannt die sie durchführen und `window` ist eher ein Name für ein ”Ding” wie ein Fenster, und nicht für eine Funktion. Wobei die Hauptfunktion üblicherweise `main()` genannt wird.
Warum wird `QApplication` und `QMainWindow` aus `QtWidgets` importiert, aber `QLabel` nicht?
Die `exec_()`-Methode mit dem Unterstrich ist veraltet und wird es in künftigen Versionen nicht mehr geben. Das war mal in Python 2 nötig, weil es dort ein ``exec``-Schlüsselwort gab. Das ist auch so ein Punkt für beliebige Quellen aus dem Internet: Vieles davon ist veraltet und auch neue, nicht wirklich gute Tutorials oder Videos schreiben von den veralteten Sachen ab.
Manuell geschrieben könnte das ungefähr so aussehen:
Code: Alles auswählen
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget
def main():
app = QApplication(sys.argv)
window = QWidget(windowTitle="Kleines Gui Fenster")
layout = QVBoxLayout()
window.setLayout(layout)
layout.addWidget(QLabel("Systemdienste"))
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
Der Designer bzw. PyUIC generieren übrigens in der Regel Code, den man so nicht von Hand schreiben würde, weil diese Programme beispielsweise nicht “wissen“, dass man Qt-Properties und Signalverbindungen direkt beim erstellen des Objekts angeben kann. Der Codegenerator wird da für jeden Wert und jede Verbindung separate Codezeilen mit Aufrufen erstellen. Was dann auch dazu fürht, das jedes kleine Zwischenergebnis einen Namen braucht, damit man da die Extra-Aufrufe drauf machen kann. Da kommt generierter Code bei heraus der für den Rechner gedacht ist, nicht ”schöner” Code, der für Menschen zum lesen oder bearbeiten gedacht ist. Die generierte Datei soll man ja auch gar nicht anfassen. Die entsprechende Warnung das nicht zu tun, die da mitgeneriert wird, hat __deets__ ja bereits erwähnt.
Was die 1000de YouTube-Tutorials angeht: Es gibt halt massenweise Leute, die einfach Content generieren wollen und dann nachdem sie sich zwei drei andere meistens nicht so gute Tutorials angeschaut haben, auch eines machen. Die Qualität steigt auf diese Weise eher nicht.
Falls Python auch Neuland ist, möchte ich noch den
Style Guide for Python Code erwähnen, wo Qt und damit auch PyQt in den Namensschreibweisen von den Python-Konventionen abweicht. Das kann man für den GUI-Code auch machen, aber bei der Programmlogik/allem was nicht mit der GUI zu tun hat, würde ich mich an die Python-Konventionen halten. Das kann man auch als ”Test” sehen ob man GUI und Programmlogik sauber getrennt hat.