我的应用程序需要一个带有标题按钮的组合框。 或等效的东西。
这是我的用例。
该应用程序读取数据结构并构建一个适当的面板。可以通过此属性面板添加/删除某些属性。
如果属性是终端,如字符串或整数,则该属性表示为经典标签加上适当的小部件。我可以轻松地为此布局添加删除按钮。
但是如果某个属性更复杂并且自身有一些子属性,则表示为一个组框。原始的QGroupBox只允许一个字符串作为标题,而我想在那里添加一个删除按钮。
我是QT的新手,可能会遗漏一些东西,不知道吗?
答案 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中相等。