【问题标题】:How to run a pyqt5 application properly?如何正确运行 pyqt5 应用程序?
【发布时间】:2018-09-10 23:28:13
【问题描述】:

我无法让我的应用程序的 GUI 以我需要的方式运行。我的问题是,鉴于以下标准,我该如何正确设置和运行 GUI。我发现缺乏好的文档非常令人沮丧(也许我找错地方了?)。

我在名为 MainCustomerWindow.py 的文件中有一个主窗口,其中包含同名的类。这是来自 qt 设计器的所有代码所在的位置。我有另一个名为 GUIController 的类文件。 GUIController 类就是这样做的,控制多个 GUI 窗口。正是在这个 GUIController 类中,我试图实例化和运行 MainCustomerWindow。这是我一直在尝试的代码。

def setup_window(self):
    APP = QtWidgets.QApplication(sys.argv)
    Window = MainCustomerWindow()
    Window.setupUi(QtWidgets.QMainWindow)
    Window.show()
    sys.exit(APP.exec_())

顺便说一句,我来自 JavaFX 和 Swing,并不完全了解 pyqt5 的工作流程。因此,如果有人也可以为此添加解释,将不胜感激。

【问题讨论】:

  • 您能解释一下您遇到的错误/不良行为吗?\
  • 添加到以下答案:here is an example 的多窗口控制器系统类似于我相信您正在尝试完成的事情。
  • 我的回答有效吗?

标签: python pyqt pyqt5 qt-designer


【解决方案1】:

Qt Designer生成的类不是widget,它是一个用来填充现有widget的类,所以你必须在window中创建一个对象,假设你使用了“主窗口”模板,那么widget必须是QMainWindow(如果是另一个可能你应该使用QDialogQWidget),那么你必须创建另一个属于设计的类,并且使用方法setupUi()你必须传递小部件来填充它:

def setup_window(self):
    app = QtWidgets.QApplication(sys.argv)
    # create window
    window = QtWidgets.QMainWindow()

    ui = MainCustomerWindow()
    # fill window
    ui.setupUi(window)

    window.show()

    sys.exit(app.exec_())

虽然更好的选择是创建一个新类并让它继承自两者:

class MainWindow(QtWidgets.QMainWindow, MainCustomerWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

如果您想获得详细信息,我建议您阅读以下内容:

【讨论】:

    【解决方案2】:

    您可以尝试获取那里的代码并将其添加到应用脚本末尾的主语句中。您还可以让此语句实例化您的类,其中 init 方法包含 setupui() 调用。例如:

    if __name__ == '__main__':
        app = QWidgets.QApplication(sys.argv)
        window = QMainWindow()
        main_window = MainCustomerWindow()
    
        window.show()
        sys.exit(app.exec())
    

    此代码首先将 PyQt 应用程序设置为 QApplication 的实例。接下来它实例化一个 QMainWindow 的实例,以便 PyQt 知道在主应用程序启动时要显示什么。根据我的经验,我将setupui() 放在了应用程序类的init 方法中。在你的情况下,在 MainCustomerWindow 的 init 方法最后,window.show() 告诉 PyQt 开始渲染主窗口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 2020-07-31
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多