我的应用程序需要一个标题中有按钮的组框或者类似的东西
这是我的用例。
该应用程序读取一个数据结构并从中构建一个属性面板。一些属性可以通过此属性面板添加/删除。
如果一个属性是一个终端,如字符串或整数,则该属性表示为一个经典标签加上适当的小部件。我可以很容易地在此布局中添加删除按钮。
但是如果一个属性更复杂,并且本身有一些子属性,则将其表示为一个分组框。原始的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中是相等的。