python - 如何使用 QML 和多个 python 文件构建 PyQt5 项目?

标签 python qt qml pyqt5

我刚刚开始使用 PyQt5 和 QML,目前有一个 main.py 文件,其中包含一些简单的代码:

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 和 Settings.xaml.cs。我想要 Settings.qml 和一个 Settings.py 文件,该文件将在其中为该页面划分模型和逻辑,而不是拥有一个巨大的 main.py 文件。

最佳答案

我最终通过执行以下操作解决了这个问题:

主.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()

设置.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 文件。

关于python - 如何使用 QML 和多个 python 文件构建 PyQt5 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37974446/

相关文章:

javascript - 类型转换 : Component to RadioButtonStyle

qt - 将 QML PathView 限制为 1 次索引滑动

python - 错误 : Django 'ChoiceField' object has no attribute 'use_required_attribute'

Qt 模型替代方案

python - 在 Python 中使用具有相同形状的逻辑数组对数组进行索引

c++ - 如何将默认值设置为 QDoubleSpinBox

c++ - 从 XBM 创建 QImage

regex - 使用 TextInput 的 IP 地址掩码

python - 将 URL 中的数据抓取到 pandas 中

python 仅记录到文件