Verwenden Sie Eigenschaften, die in einer separaten Python-Datei in QML deklariert sind
Posted: 14 Jan 2025, 14:17
Ich möchte die Ordnung in meinem Projekt wahren, deshalb habe ich darüber nachgedacht, die Eigenschaften aus der Datei „main.py“ in eine andere mit dem Namen „CustomVariables.py“ zu verschieben. Aber jetzt bekomme ich „TypeError: Eigenschaft ‚loaderSource‘ von undefiniert kann nicht gelesen werden“. Wenn Sie die Kommentare im Code unten auskommentieren, funktioniert es einwandfrei, ich möchte jedoch keine Eigenschaften innerhalb der Klasse „BG“ deklarieren. Kann mir jemand helfen, wie ich das richtig einrichte?
CustomVariables.py
main.py
main.qml
Ich habe auch versucht, den „cv“ in „init“ zu deklarieren:
aber immer noch ohne Erfolg
CustomVariables.py
Code: Select all
from PySide6.QtCore import QObject, Property, Signal
class CustomVariables(QObject):
def __init__(self):
QObject.__init__(self)
self.loaderSource = 'PageWork.qml'
def get_loaderSource(self):
return self._loaderSource
def set_loaderSource(self, new_loaderSource):
self._loaderSource = new_loaderSource
self.loaderSourceChanged.emit()
loaderSourceChanged = Signal()
loaderSource = Property(str, get_loaderSource, set_loaderSource, notify=loaderSourceChanged)
Code: Select all
import sys
from pathlib import Path
from PySide6.QtGui import QGuiApplication
from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtCore import QObject, Property, Signal
from CustomVariables import CustomVariables
class BG(QObject):
def __init__(self):
QObject.__init__(self)
# self.loaderSource = 'PageWork.qml'
cv = CustomVariables()
# def get_loaderSource(self):
# return self._loaderSource
# def set_loaderSource(self, new_loaderSource):
# self._loaderSource = new_loaderSource
# self.loaderSourceChanged.emit()
# loaderSourceChanged = Signal()
# loaderSource = Property(str, get_loaderSource, set_loaderSource, notify=loaderSourceChanged)
if __name__ == "__main__":
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
background = BG()
engine.rootContext().setContextProperty("bg", background)
qml_file = Path(__file__).resolve().parent / "main.qml"
engine.load(qml_file)
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec())
Code: Select all
import QtQuick.Controls.FluentWinUI3
import QtQuick
Window {
id: root
width: 1280
height: 720
visible: true
Loader {
id: projectLoader
anchors.fill: parent
asynchronous: true
source: bg.cv.loaderSource
//source: bg.loaderSource
}
}
Code: Select all
self.cv = CustomVariables()