如何在标题中使用按钮构建QGroupBox



我的应用程序需要一个标题中有按钮的组框或者类似的东西

这是我的用例。

该应用程序读取一个数据结构并从中构建一个属性面板。一些属性可以通过此属性面板添加/删除。

如果一个属性是一个终端,如字符串或整数,则该属性表示为一个经典标签加上适当的小部件。我可以很容易地在此布局中添加删除按钮。

但是如果一个属性更复杂,并且本身有一些子属性,则将其表示为一个分组框。原始的QGroupBox只允许一个字符串作为标题,而我想在那里添加一个删除按钮。

我是QT的新手,可能会错过一些东西,知道吗?

PyQt附带的小部件是基本的构建块和方便的小部件,用于满足常见用途和需求。但是,当你开始想要自定义小部件时,你就可以自由地将接近的东西子类化,并编写自己的自定义小部件。

让我们取QGroupBox。它基本上是一个由顶部的QLabel组成的QFrame。然后,该类包装一些方法,这些方法允许您设置该标签的文本。这个基本的小部件一开始是这样的:

group = QtGui.QGroupBox()
group.setTitle("FOO")

我们可以做的是取一个QWidget,并添加一个带有空白标签的QGroupBox。然后在父窗口小部件的绝对位置放置一个按钮。我们本可以使用QFrame,但使用QGroupBox可以获得您想要的即时样式。

class ButtonGroupBox(QtGui.QWidget):
    def __init__(self, parent=None):
        super(ButtonGroupBox, self).__init__(parent=parent)
        self.layout = QtGui.QVBoxLayout(self)
        self.layout.setContentsMargins(0,24,0,0)
        self.groupBox = QtGui.QGroupBox(self)
        self.button = QtGui.QPushButton("FOO", parent=self)
        self.layout.addWidget(self.groupBox)
        self.button.move(0, -4) 

您可以使用可以更改按钮文本的方法来扩展此自定义类。顶部小部件的边距是必要的,可以为您提供额外的空间来布局GroupBox 上方的按钮

实际上,QGroupBox类允许您通过checkable属性在标签旁边放置一个复选框。

当用户与复选框交互时,它将发出以下信号:

void clicked(bool checked);
void toggled(bool on);

相应的方法和信号在PyQt中是相等的。

最新更新