如何在 QWidget 内插入另一个 QWidget?

3

我在处理父子关系和初始化问题上遇到了困难,不知道为什么这个操作不能正常工作。 首先我创建了一个标签,然后我又创建了另一个带有一些绘制内容的标签,接着我创建了一个包含这两个标签的小部件,最后我想把这个新的小部件放入主窗口中...但是什么也没有显示出来。

import sys
import os
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

class Labhtml(QLabel):

    def __init__(self):
        super().__init__()

        label = QLabel('html')


class Bar(QLabel):

    def __init__(self):
        super().__init__()

        self.resize(100, 5)

    def paintEvent(self, e):
        qp = QPainter(self)
        qp.setBrush(QColor(200, 0, 0))
        qp.drawRect(0,0,200,3)


class Wid(QWidget):
    def __init__(self, parent):
        super().__init__(parent=parent)

        widget = QWidget()
        html = Labhtml()
        bar = Bar()

        self.layout = QVBoxLayout(widget)
        self.layout.addWidget(html)
        self.layout.addWidget(bar)


class Example(QScrollArea):
    def __init__(self):
        super().__init__()

        widget = QWidget()
        layout = QVBoxLayout(widget)

        layout.addWidget(Wid(widget))

        self.setWidget(widget)
        self.setWidgetResizable(True)

        self.show()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
1个回答

2

首先针对类 Labhtml,当你从 QLabel 继承时,你可以使用基类的方法和属性,或者使用实例化机制传递一些参数:

class Labhtml(QLabel):

    def __init__(self):
        super().__init__()
        self.setText('html')

那么你就不需要在 Wid 类内再创建另一个小部件,而是必须引用 self
class Wid(QWidget):
    def __init__(self, parent):
        super().__init__(parent=parent)

        html = Labhtml()
        bar = Bar()

        self.layout = QVBoxLayout(self)
        self.layout.addWidget(html)
        self.layout.addWidget(bar)

关于实例化机制,您也可以通过声明一个新的text参数(与Qlabel使用的相同)来编写类,并在创建实例时传递它:
class Labhtml(QLabel):

    def __init__(self, text):
        super().__init__(text)


class Wid(QWidget):
    def __init__(self, parent):
        super().__init__(parent=parent)

        html = Labhtml('html')

谢谢。对于Labhtml QLabel,我实际上使用HTML文件作为子集。在上面的代码中,标签未显示该子集的所有内容,它会折叠该标签的HTML子集。有什么建议可以避免这种情况,并使标签适应尺寸以显示整个HTML表吗? - user3755529
你能否举个使用HTML文件的例子?如果在这里没有找到答案,或许创建一个新问题可以帮助其他人。 - PRMoureu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接