Verwenden Sie Eigenschaften, die in einer separaten Python-Datei in QML deklariert sindPython

Python-Programme
Guest
 Verwenden Sie Eigenschaften, die in einer separaten Python-Datei in QML deklariert sind

Post by Guest »

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

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)
main.py

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())
main.qml

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
}
}

Ich habe auch versucht, den „cv“ in „init“ zu deklarieren:

Code: Select all

self.cv = CustomVariables()
aber immer noch ohne Erfolg

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post