Как построить QGroupBox с кнопкой в ​​заголовке? - PullRequest
3 голосов
/ 20 февраля 2012

Мне нужно для моего приложения групповую коробку с кнопкой в ​​заголовке. Или что-то эквивалентное.

Вот мой пример использования.

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

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

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

Я новичок в QT и, может быть, что-то упустил, есть идеи?

Ответы [ 2 ]

5 голосов
/ 20 февраля 2012

Виджеты, поставляемые в комплекте с 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 голосов
/ 20 февраля 2012

На самом деле класс QGroupBox позволяет установить флажок рядом с меткой с помощью проверяемого свойства .

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...