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

时间:2012-02-20 15:23:59

标签: python qt pyqt

我的应用程序需要一个带有标题按钮的组合框。 或等效的东西。

这是我的用例。

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

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

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

我是QT的新手,可能会遗漏一些东西,不知道吗?

2 个答案:

答案 0 :(得分:5)

PyQt提供的小部件是基本构建块和便利小部件,可以满足常见的用法和需求。但是当你开始想要自定义小部件时,你就可以自由地将一些接近的东西子类化,并组成你自己的自定义小部件。

让我们拿走QGroupBox。它基本上是一个QFrame,顶部是QLabel。然后该类包装了一些允许您设置此标签文本的方法。这个基本小部件将从:

开始
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上方的按钮

答案 1 :(得分:3)

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

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

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

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