2016-06-22 58 views
0

我剛開始使用PyQt5和QML開始,目前有有一些簡單的代碼main.py文件:如何用多個python文件構建一個使用QML的PyQt5項目?

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

在我MainWindow.QML我有一個ApplicationWindow,用工具欄和StackView那目前推動和彈出不同的QML文件取決於按鈕點擊等

我很好奇,如果有一個正確的方式來使用每個QML文件的Python文件有點像WPF有Settings.xaml和設置。 xaml.cs.我希望Settings.qml和一個Settings.py文件,該文件可以將模型和邏輯劃分爲該頁面,而不是擁有一個巨大的main.py文件。

回答

1

我最終通過執行以下操作解決這個:

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(在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) 

這將允許我將業務邏輯組織到不同的Python頁面中,併爲GUI提供單獨的QML文件。

相關問題