我阅读,测试并了解了许多来自Qt Designer的QWidget用法示例,这些示例已被提升为PyQt5。但是,我无法自己处理一个简单的示例。
在我下面显示我的代码,它不起作用并尝试解释。
在Qt设计器中,我创建了一个简单的QMainWindow,命名为MainWindow标准化
我创建一个标签QLabel。我将其升级为“ neuLabel”类,并将其命名为labelqt。带有Add的窗口,标题为neulabel.h并带有促进->一切都很好。
我知道,我必须为neuLabel类编写代码。但是:在哪里做?
通过一个非常简单的示例,我像这样尝试了它:
from PyQt5 import QtWidgets, uic
import sys
uifile_1 = 'testpromote.ui'
form_1, base_1 = uic.loadUiType(uifile_1)
class neuLabel(QLabel, QPixmap):
def __init__(self,title,pixmap,parent):
super().__init__(title,parent)
self.setAcceptDrops(True)
def mousePressEvent(self, e):
QLabel.mousePressEvent(self, e)
if e.button() == QtCore.Qt.LeftButton:
print('press')
class myApp(base_1, form_1):
def __init__(self):
super(base_1,self).__init__()
self.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = myApp() #Dialog()
ex.show()
sys.exit(app.exec_())
错误是这样的
Traceback (most recent call last):
File "/home/jf/PycharmProjects/myMuhaInp/testpromote.py", line 5, in <module>
form_1, base_1 = uic.loadUiType(uifile_1)
File "/usr/lib/python3/dist-packages/PyQt5/uic/__init__.py", line 201, in loadUiType
exec(code_string.getvalue(), ui_globals)
File "<string>", line 37, in <module>
ModuleNotFoundError: No module named 'neulabel'
我真的不明白,在哪里编写类neulabel的代码(我确实尝试了很多示例。(在任何示例中,我都没有发现,它是单个QWidget的推广)]
在所有代码都出现错误之前:为什么需要一个从QLabel和QPixmap继承的类?我看不出要点,QLabel uses QPixmap(composition),QLabel is不是QPixmap(inherency)。
要升级的小部件,必须具有以下规则(我在文档中没有找到它们:]
小部件的构造函数必须具有单个参数,并且必须是父代。
该类不得与使用该文件的文件位于同一文件中,因为它可以创建循环导入。
小部件升级表格要求2个数据:
例如,如果“ FooClass”被放置为升级的类名称,并且“ a / b / c”或“ abc”被放置在头文件中,它将被翻译为from a.b.c import Foo
,因此请确认这是正确的。