Erste Gehversuche mit QtCreator auf macOS

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
wernerbarz
User
Beiträge: 4
Registriert: Donnerstag 21. Oktober 2021, 17:02

Ich versuche mich zum ersten Mal an dem QtCreator.
Habe mal ein kleines Programm mit dem Creator erstellt:

Code: Alles auswählen

# This Python file uses the following encoding: utf-8
import os
from pathlib import Path
import sys

from PySide2.QtWidgets import QApplication, QMainWindow
from PySide2.QtCore import QFile
from PySide2.QtUiTools import QUiLoader
from PySide2 import QtCore

QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_DontCheckOpenGLContextThreadAffinity)
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts)


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.load_ui()
        
    def load_ui(self):

        path = os.fspath(Path(__file__).resolve().parent / "mainwindow.ui")
        ui_file = QFile(path)
        ui_file.open(QFile.ReadOnly)
        loader = QUiLoader()
        loader.load(ui_file, self)
        ui_file.close()


if __name__ == "__main__":
    app = QApplication([])
    main = MainWindow()
    main.show()
    sys.exit(app.exec_())
Damit bekomme ich aber immer nur ein kleines, leeres Fenster angezeigt und nicht mein "mainwindow.ui", welches ich mit dem QtDesigner erstellt habe.
Kann jemand helfen?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

QUiLoader.load liefert ein widget, mit dem Du aber nichts machst.
Wenn die Datei mainwindow.ui heißt, ist da wahrscheinlich ein komplettes QMainWindow definiert:

Code: Alles auswählen

import sys
from pathlib import Path
from PySide2.QtWidgets import QApplication
from PySide2.QtUiTools import QUiLoader

class MainWindow():
    def __init__(self):
        path = str(Path(__file__).parent / "mainwindow.ui")
        self.widget = QUiLoader().load(path)

    def show(self):
        self.widget.show()


def main():
    app = QApplication([])
    main = MainWindow()
    main.show()
    sys.exit(app.exec())


if __name__ == "__main__":
    main()
wernerbarz
User
Beiträge: 4
Registriert: Donnerstag 21. Oktober 2021, 17:02

Super! Vielen Dank für die schnelle Hilfe!
Manchmal ist die (Python)Welt mit Brettern vernagelt... :) :wink:
Jetzt läuft es erstmal, wie ich es mir vorgestellt habe.
Nochmals Danke.
wernerbarz
User
Beiträge: 4
Registriert: Donnerstag 21. Oktober 2021, 17:02

So, habe nun versucht, auf ein QLabel mit dem QObject 'label_quickView' in mainwindow.ui zuzugreifen. Leider ohne Erfolg...
Was mache ich falsch?

Code: Alles auswählen

# This Python file uses the following encoding: utf-8
import os
from pathlib import Path
import sys

from PySide2.QtWidgets import QWidget, QApplication, QMainWindow
from PySide2.QtCore import QFile
from PySide2.QtUiTools import QUiLoader
from PySide2 import QtCore


QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_DontCheckOpenGLContextThreadAffinity)
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts)


class MainWindow():
    def __init__(self):       
        path = str(Path(__file__).parent / "mainwindow.ui")
        self.widget = QUiLoader().load(path)

    def show(self):
        self.widget.show()


def main():
    app = QApplication([])
    my_main = MainWindow()
    my_main.show()
    my_main.label_quickView.setText("Hallo Welt")
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/Users/wernerbarz/PycharmProjects/MissionCreator_neu/mainwindow_neu.py", line 35, in <module>
    main()
  File "/Users/wernerbarz/PycharmProjects/MissionCreator_neu/mainwindow_neu.py", line 30, in main
    my_main.label_quickView.setText("Hallo Welt")
AttributeError: 'MainWindow' object has no attribute 'label_quickView'

Process finished with exit code 1
Ist aber definitiv drin...
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das windo hast du doch widget genannt. Da musst du schon drüber hin auf deine Widgets zugreifen. Wie du es ja auch mit show machst.
wernerbarz
User
Beiträge: 4
Registriert: Donnerstag 21. Oktober 2021, 17:02

Danke für die Hilfe.
Wie ich schon oben schrieb: "Meine ersten Gehversuche..."
Jetzt bin ich wieder einen Schritt weiter.
Antworten