PyQt5:将 loadUi 与 Qt Designer 中的提升小部件一起使用

m2as3registeredservices ohmone

Qt 和 Qt Designer 的完整新手。我尝试按照一些在线教程来寻找一种在 Qt 中嵌入 matplotlib 图形的方法。显然,该方法是使用 QWidget 的子类,这是通过“提升”QWidget 来完成的。

我尝试了这个 SE链接和这个 youtube视频中显示的方法

在不提升 QWidget 的情况下,可以将 *.ui 文件加载到 python 中,而以下脚本不会出现任何问题。

from PyQt5 import QtWidgets, uic
import sys

class Ui(QtWidgets.QMainWindow):
    def __init__(self):
        super(Ui, self).__init__()
        uic.loadUi('untitled.ui', self)
        self.show()

app = QtWidgets.QApplication(sys.argv)
window = Ui()
app.exec_()

但是当我如下推广 QWidget 时,我收到以下错误。

在此处输入图像描述

Traceback (most recent call last):
  File "C:\Users\user.user\Desktop\pyqt_gui.py", line 11, in <module>
    window = Ui()
  File "C:\Users\user.user\Desktop\pyqt_gui.py", line 7, in __init__
    uic.loadUi('untitled.ui', self)
...
...
...
  File "C:\Users\user.user\Anaconda3\lib\site-packages\PyQt5\uic\Loader\qobjectcreator.py", line 115, in search
    module = __import__(mname, {}, {}, (cls,))
ModuleNotFoundError: No module named 'canvas'

有人可以对此有所了解吗?

在房间里

您遵循的指南似乎没有足够清楚地解释如何将提升的小部件链接到您的Canvas班级,因为您的屏幕截图显示了错误的值。当您第一次在“Promoted Widgets”对话框中输入“ Promoted 类名”时,Qt Designer 会自动填写Header 文件,所以它最终看起来像这样:

屏幕截图

但这适用于 C++ 项目而不是 Python 项目,因此您需要将“canvas.h”更改为包含您的Canvas类的 Python 模块的导入路径。因此,如果该模块名为“canvas.py”并且与“pyqt_gui.py”文件位于同一文件夹中,您只需将头文件编辑为“camvas”(即不带扩展名)。要修复现有的 ui 文件,您可以重新打开“Promoted Widgets”对话框,然后双击当前的头文件值进行编辑(然后还要确保在之后保存更改):

截屏

这将导致将以下行添加到生成的 Python 模块中:

from canvas import Canvas

(如果你想在 Qt Designer 中预览这个,你可以在菜单栏中选择 Form -> View Python Code)。


注意:您可以输入任何有效的 Python 导入路径作为头文件因此,如果您的自定义小部件模块位于名为“widgets”的子包中,您可以输入“widgets.canvas”。此外,还可以通过参数指定基本包来使用相对导入loadUi在这种情况下,您将输入“.canvas”(注意前导点)作为头文件,然后loadUi像这样调用:

uic.loadUi('untitled.ui', self, package='widgets')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Qt Designer表单和PyQt5在QWidget中绘制matplotlib图

您可以在 Qt Designer (PyQt5) 中配置按键事件处理吗?

如何在 python qt Designer 或 pyqt5 中添加 matplotlib 3d pyplot

使用pyqt5和qt designer从主窗口打开第二个窗口

PyQt / Qt Designer - 无需插件即可提升小部件的额外参数

如何使用pyqt5将python代码转换为gui?(禁止使用Qt Designer或其他应用程序,我必须自己编写代码)

PyQt5:如何安装/运行Qt Designer

使用uic.loadUI()在PyQt5中重新定义(覆盖)方法

从Qt Designer调用小部件

使用PyQt和Qt Designer ui文件

访问在Qt Designer中添加的小部件

为什么在pyqt5中应该使用pyuic5而不是uic.loadUi(“ my.ui”)?

使用Qt Designer在布局中居中放置小部件

使用 Qt Designer(生成的 GUI)创建自定义小部件并将它们提升为默认小部件

如何在主窗口中使用另一个窗口的输入(使用 PyQt5 和 qt-designer)?

Qt Designer 使小部件与布局中的另一个小部件重叠

从Qt Designer和PyQt开始

如何使QtWebKitWidgets.QWebView与Qt Designer一起使用

QML vs Qt Designer vs纯代码?(在PyQt中)

Qt Designer和PyQt程序中verticalLayout的大小不同

使用Qt Designer和PyQt / PySide进行MVC设计

Qt Designer自定义小部件:使用标志

Pyqt5 Designer-添加小部件时网格布局中断

Qt5 Designer Ui文件中的QSystemTrayIcon

如何使用Qt Designer将文本添加到QToolbar?

在 Qt (PyQT5) 中从嵌套子小部件向祖先发送信号

Qt 小部件将子布局堆叠在一起

如何以编程方式将Qt小部件(QPushButton,QTextEdit,QLabel)添加到Qt Designer布局?

如何使用 PyQt5 中垂直布局的 QScrollArea 使小部件堆叠在一起?