当前位置: 首页 > 面试题库 >

我在哪里为Qt设计器中的单个升级QWidget编写类

祁永嘉
2023-03-14
问题内容

我阅读、测试并理解了很多Qt中qwidget的使用示例设计器,升级为PyQt5。然而我无法应付
我自己的一个简单例子。下面我展示了我的代码,这是不工作,并试图解释。
在Qt设计中,我创建了一个简单的QMainWindow,命名为MainWindow在其中,我创建了一个标签QLabel。我把这个提升到“neulable”类把它命名为labelqt。窗口中有,Add,header neulable.h和promote–>
一切都很好。我明白,我必须为类标签编写代码。但是:去哪里
怎么办?
我举了一个非常简单的例子:

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_())

The error is like this

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'

我真的不明白,在哪里编写类标签(我真的
试过很多例子。(我发现,在任何一个例子中,都不是单一的
(小部件)


问题答案:

在所有代码都出现错误之前:为什么需要从
QLabel和QPixmap?我不明白重点,QLabel使用a
QPixmap(合成),QLabel不是QPixmap(固有)。
对于要升级的小部件,它必须有以下规则(我没有找到
在文档中:
小部件的构造函数必须具有单个参数,并且必须是父级。
类不能在使用它的同一个文件中,因为它可以创建循环导入。
*小部件促销表单要求提供2个数据:
1_提升的类名\必须是类的名称。
2文件标题文件必须是文件所在位置(C++中的自定义规则),文件名与类同名,但小写字母,但在Python中不符合。
例如,如果“FooClass”被放置为\u提升的类名\u和“a/b/c”或
“导入”将放在a.c.u的头文件中
所以请确认这是正确的。
示例:
综上所述,最简单的实现是创建一个.py
要升职的班级是:
新标签.py**

from PyQt5 import QtCore, QtWidgets


class NeuLabel(QtWidgets.QLabel):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setAcceptDrops(True)

    def mousePressEvent(self, e):
        super().mousePressEvent(e)
        if e.button() == QtCore.Qt.LeftButton:
            print("press")

然后在.ui中,您必须在表单中填写以下内容,按“添加”按钮,然后是“升级”按钮

正在生成以下.ui:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="NeuLabel" name="label">
    <property name="geometry">
     <rect>
      <x>120</x>
      <y>160</y>
      <width>251</width>
      <height>191</height>
     </rect>
    </property>
    <property name="text">
     <string>TextLabel</string>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>26</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <customwidgets>
  <customwidget>
   <class>NeuLabel</class>
   <extends>QLabel</extends>
   <header>neulabel</header>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>

Then used in the main file:

import os
import sys

from PyQt5 import QtWidgets, uic

CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))

uifile_1 = os.path.join(CURRENT_DIR, "testpromote.ui")
form_1, base_1 = uic.loadUiType(uifile_1)


class myApp(base_1, form_1):
    def __init__(self):
        super(base_1, self).__init__()
        self.setupUi(self)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    ex = myApp()
    ex.show()
    sys.exit(app.exec_())



├── main.py
├── neulabel.py
└── testpromote.ui


 类似资料:
  • 在以前版本的firebase_auth:^0.5.4中,有一个选项user.uid(uid是字符串类型)。 在firebase_auth的最新版本中:^0.15.0 1,我应该选择哪个选项来获取user.uid或替换它。 有关 FirebaseAuth 0.12.0 中的重大更改的说明。 添加了新的AuthResult和AdditionalUserInfo类 破坏性更改:登录方法现在返回AuthR

  • 本文向大家介绍JavaScript编写简单的计算器,包括了JavaScript编写简单的计算器的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript编写简单计算器的代码。分享给大家供大家参考。具体如下: 运行效果截图如下: 具体代码如下 js代码: 关于计算器的精彩文章请查看《计算器专题》 ,更多精彩等你来发现! 一个简单的计算器就是这样实现的,大家也可以利用javascri

  • 问题内容: 我设计了10多个站点,但我仍然对“我应该使用正确的单位是什么”有个疑问。无论是px还是em或%。请引导我正确的方向 编辑1:用于版式(特别是对于容器盒) 问题答案: 根据上下文的不同单位。如果有一个最适合每种情况的单位,那么就不会有那么多单位。 按照经验法则: 如果您正在处理屏幕媒体: 使用的字体大小 使用的图像 使用,或表示盒子尺寸 线高使用比例 如果您使用打印介质: 最好避免(无论

  • 我已经学习了Google设计指南。 我好好看看http://www.google.com/design/spec/material-design/introduction.html. 在web初学者工具包的github源代码中。但是,会有什么来源吗http://www.google.com/design/spec/material-design/introduction.html?

  • 我可以读它,修改标志,然后写回来,但这是正确的方法吗? 我见过一些写线圈的命令,但我不太确定线圈是什么--是不是有点?如果是,如何得到线圈的地址?

  • 谢谢你的回应。我检查了位置,它被标识为与ANDROID_SDK_HOME环境路径相同的位置。它仍然说根是未定义的。我创建了一个到相同位置的ANDROID_SDK_ROOT环境路径,但它仍然没有定义。