【问题标题】:How to insert a Qwidget inside Qwidget如何在 Qwidget 中插入 Qwidget
【发布时间】:2017-09-08 05:24:50
【问题描述】:

我对所有育儿/初始化问题感到迷茫,不知道为什么这不起作用。 所以我创建了一个标签,然后我创建了另一个带有一些绘画的标签,我制作了一个包含两者的小部件,然后我想把这个新的小部件放在主窗口中......但什么也没有出现

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

【问题讨论】:

    标签: python pyqt qwidget


    【解决方案1】:

    首先对于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 表格的任何建议?
    • 你能举一个使用的 HTML 文件的例子吗?如果您在这里没有找到任何答案,也许可以创建一个新问题,这可以帮助其他人。
    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    相关资源
    最近更新 更多