2012-02-20 3 views
3

Мне нужно для моего приложения групповой ящик с кнопкой в ​​заголовке. Или что-то подобное.Как создать QGroupBox с кнопкой в ​​заголовке?

Вот мой usecase.

Приложение считывает структуру данных и создает из нее панель управления. Некоторые свойства могут быть добавлены/удалены с помощью этой панели свойств.

Если свойство является терминалом, как строка или целое число, свойство представлено как классический ярлык плюс соответствующий виджет. Я легко могу добавить кнопку удаления в этот макет.

Но Если свойство более сложное и имеет некоторые подзадачи, оно представлено как групповой бокс. Оригинальный QGroupBox разрешает только строку как заголовок, в то время как я хотел бы добавить туда кнопку удаления.

Я новичок в QT и, возможно, что-то не хватает, любая идея?

ответ

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.

3

На самом деле, класс QGroupBox позволяет поместить флажок рядом с меткой через checkable property.

Когда пользователь взаимодействует с флажком, она будет излучает следующие сигналы:

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

Соответствующие методы и сигналы равны в PyQt.

+0

+1 Это здорово - именно то, что я надеялся найти ... –

Смежные вопросы