繁体   English   中英

PyQt5将自定义QWidget添加到QLayout

[英]PyQt5 add custom QWidget to QLayout

目前,我正在尝试将自定义QWidget类添加到QVBoxLayout。 我遇到的问题是该小部件根本没有出现在布局中。 我什至尝试设置QWidget的最小大小,因为我认为该窗口小部件没有显示,因为它的默认大小设置为零。

这是该类外观的简化:

class myWidget(QWidget):

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

        # Slider
        self.mySlider = QSlider(Qt.Horizontal)
        self.mySlider.setRange(-360, 360)

        # LCD Screen
        self.lcd = QLCDNumber()
        self.lcd.setMinimumHeight(45)
        self.lcd.setMaximumHeight(75)

        # set Size
        self.setMinimumSize(QSize(400,300))

我删除了滑块和LCD屏幕之间的信号和插槽,因为这里我不担心功能。 唯一的事实是,在以下代码中,我直接在两个按钮之间得到了QSize(400,300)的灰色区域:

class MainWindow(QMainWindow):

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

        #Create Widgets to be Added to Central Widget
        self.w1 = QPushButton("First")
        self.w2 = myWidget()
        self.w3 = QPushButton("Third")

        #Set Central Widget and VBox
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)
        self.layout = QVBoxLayout()
        self.central_widget.setLayout(self.layout)

        #Add widgets
        self.layout.addWidget(self.w1)
        self.layout.addWidget(self.w2)
        self.layout.addWidget(self.w3)

因此,我要做的只是创建3个小部件,并将它们放入中央小部件中的QVBoxLayout中。 2个按钮小部件w1w3出现了,但是我的自定义小部件没有出现,并且通过setMinimumSize增加小部件的大小仅在w1w3之间增加了灰色间距。

所以小部件在那里,由于某种原因它才不可见。 我对PyQt来说还很陌生,所以请解释为什么会发生这种情况。

QWidgets只是其他小部件的容器。 没有任何布局和子小部件的QWidget 看起来就像是空白空间,除非您要进行一些自定义绘制或样式。

在您的示例中, 您实际上并没有在自定义窗口小部件中添加任何子窗口小部件 为了将子小部件添加到另一个小部件,您需要设置子小部件的父部件,或者将子小部件添加到父小部件的布局中(该部件将自动重新父化该子小部件)

class myWidget(QWidget):

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

        # Slider
        self.mySlider = QSlider(Qt.Horizontal)

在这里,您正在创建QSlider ,但实际上它不是MyWidget拥有的,它最终将由Qt拥有的,我希望它会在主窗口的左上角绘制。

为了使它成为MyWidget您需要设置父级并将其添加到布局中。

class myWidget(QWidget):

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

        self.myLay = QVBoxLayout()
        self.setLayout(self.myLay)

        # Notice self is being passed in to set the parent
        self.mySlider = QSlider(Qt.Horizontal, self)

        # You need to add widgets to a layout to position them properly
        self.myLay.addWidget(self.mySlider)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM