2016-06-22 16 views
0

Ich bin nur mit PyQt5 und QML den ersten Schritten und zur Zeit eine main.py-Datei, die einige einfache Code hat:Wie wird ein PyQt5-Projekt mit QML mit mehreren Python-Dateien erstellt?

if __name__ == '__main__': 
    app = QGuiApplication(sys.argv) 
    engine = QQmlApplicationEngine() 
    engine.load('QML/MainWindow.qml') 
    sys.exit(app.exec_()) 

In meinem MainWindow.QML ich einen Application haben, mit einer Werkzeugleiste und einem StackView dass verschiebt und öffnet verschiedene QML-Dateien je nach Tastenklicks, etc.

Ich bin neugierig, ob es eine richtige Möglichkeit gibt, eine Python-Datei für jede QML-Datei wie WPF zu verwenden, wo sich Settings.xaml und Settings befinden. xaml.cs. Ich möchte Settings.qml und auch eine Settings.py-Datei, die Modelle und Logik für diese Seite in Kompartimente haben, anstatt eine massive main.py-Datei.

Antwort

1

Ich landete diese Lösung, indem Sie die folgenden Schritte aus:

Main.py:

def settings_clicked(): 
    stackView.push(Settings(engine, stackView).load()) 

if __name__ == '__main__': 
    app = QGuiApplication(sys.argv) 

    engine = QQmlEngine() 

    component = QQmlComponent(engine) 
    component.loadUrl(QUrl('QML/MainWindow.qml')) 

    mainWindow = component.create() 

    stackView = mainWindow.findChild(QObject, "stackView") 

    home = Home(engine, stackView) 
    home.load() 

    sys.exit(app.exec_()) 

Home.py (erste anfängliche Seite der StackView)

class Home: 

    def __init__(self, engine, stackview): 
     self.engine = engine 
     self.stackview = stackview 

    def load(self): 
     self.component = QQmlComponent(self.engine) 
     self.component.loadUrl(QUrl('QML/Home.qml')) 

     self.home = self.component.create() 

     self.settings_button = self.home.findChild(QObject, "settingsButton") 
     self.settings_button.clicked.connect(self.settings_clicked) 

     self.stackview.push(self.home) 

    def settings_clicked(self): 
     self.settings = Settings(self.engine, self.stackview) 
     self.settings.load() 

Settings.py :

class Settings: 
    def __init__(self, engine, stackview): 
     self.engine = engine 
     self.stackview = stackview 

    def load(self): 
     self.component = QQmlComponent(self.engine) 
     self.component.loadUrl(QUrl('QML/Settings/Settings.qml')) 

     self.settings = self.component.create() 

     # Attach to signals, etc. 

     self.stackview.push(self.settings) 

Dadurch kann ich Geschäftslogik auf verschiedenen Python-Seiten organisieren und separate QML-Dateien für die GUI bereitstellen.