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] 删除。
我来说两句