PyQt 5 - 显示 Py Designer GUI 的简单代码?

Posted

技术标签:

【中文标题】PyQt 5 - 显示 Py Designer GUI 的简单代码?【英文标题】:PyQt 5 - simple code to show Py Designer GUI? 【发布时间】:2017-07-12 21:33:04 【问题描述】:

我似乎在开始之前就失败了 - 我无法让 Qt 设计器生成的 GUI 在 Python 3 中启动。

我的设置:

Windows 10 x64 上的 Anaconda,安装了 Python 3、PyQt 5、jupyter notebook 我在 Qt Designer 中创建了一个简单的 GUI(字面意思是:只有一个文本标签),名为“blob.py”,然后我使用以下命令对其进行了转换:“pyuic5 -o blob.py blob.ui”

浏览了无数教程(99% 专门用于与 Qt5 不兼容的 Qt4),我发现以下代码应该是简单 Qt GUI 的“hello world”实现:

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from blob import Ui_MainWindow

class AppWindow(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.show()

app = QApplication(sys.argv)
w = AppWindow()
w.show()
sys.exit(app.exec_())

但是,当我尝试在 Jupyter Notebook 中执行它时,我收到以下错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-1-804f20d6b17d> in <module>()
     12 
     13 app = QApplication(sys.argv)
---> 14 w = AppWindow()
     15 w.show()
     16 sys.exit(app.exec_())

<ipython-input-1-804f20d6b17d> in __init__(self)
      8         super().__init__()
      9         self.ui = Ui_MainWindow()
---> 10         self.ui.setupUi(self)
     11         self.show()
     12 

C:\Users\Dante\blob.py in setupUi(self, MainWindow)
     18         self.label.setGeometry(QtCore.QRect(50, 20, 131, 16))
     19         self.label.setObjectName("label")
---> 20         MainWindow.setCentralWidget(self.centralwidget)
     21         self.menubar = QtWidgets.QMenuBar(MainWindow)
     22         self.menubar.setGeometry(QtCore.QRect(0, 0, 545, 26))

AttributeError: 'AppWindow' object has no attribute 'setCentralWidget'

我没有手动接触过blob.py。

有谁知道为什么 Qt Designer 生成的代码有问题? 我错过了什么?

注意:启动一个简单的 PyQt 代码(即不导入 GUI,但使用一些命令手动创建它)工作正常。

感谢您的热心帮助!

【问题讨论】:

【参考方案1】:

在使用 Qt Designer 时使用模板(MainWindow、Dialog、Widget),并且在实现逻辑时应使用相同的小部件。在您的情况下,您使用了 MainWindow,因此您应该使用 QMainWindow 而不是 QDialog。以下代码是解决方案:

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from blob import Ui_MainWindow

class AppWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.show()

app = QApplication(sys.argv)
w = AppWindow()
w.show()
sys.exit(app.exec_())

【讨论】:

我现在感觉自己像个白痴...非常感谢您的及时回答!

以上是关于PyQt 5 - 显示 Py Designer GUI 的简单代码?的主要内容,如果未能解决你的问题,请参考以下文章

虚拟环境安装pyqt5以及转换为.py文件

pyqt5 Qt Designer + matpoltlib画图显示动态曲线

怎么把pyQt Designer 生成的 *.ui文件转换为 *.py?

PyQt 之 QT designer ui使用

PyQt5——Qt Designer初探

PyQt5-Qt Designer工具箱(QToolBox)控件的使用