我在哪里为Qt Designer提供的单个提升的QWidget编写类

问题描述 投票:0回答:1

我阅读,测试并了解了许多来自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的推广)]

python pyqt pyqt5 python-3.6 qt-designer
1个回答
0
投票

在所有代码都出现错误之前:为什么需要一个从QLabel和QPixmap继承的类?我看不出要点,QLabel uses QPixmap(composition),QLabel is不是QPixmap(inherency)。

要升级的小部件,必须具有以下规则(我在文档中没有找到它们:]

  • 小部件的构造函数必须具有单个参数,并且必须是父代。

  • 该类不得与使用该文件的文件位于同一文件中,因为它可以创建循环导入。

  • 小部件升级表格要求2个数据:

    1. 升级的类名称,必须是该类的名称。
    2. Header file,必须是该类所在文件的位置(在C ++中,根据自定义规则,该文件的名称与该类的名称相同,但使用小写字母,但是在python中,它不符合)。

    例如,如果“ FooClass”被放置为升级的类名称,并且“ a / b / c”或“ abc”被放置在头文件中,它将被翻译为from a.b.c import Foo,因此请确认这是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.