Размер/стиль элемента управления QToolButton (PyQt5)

Я пытаюсь реализовать раскрывающийся список «Подробности» для диалогового окна с помощью QToolButton (для переключения между отображением/скрытием) и QTextEdit (для отображения информации). Я переключаюсь между стрелкой вправо (скрыта) и стрелкой вниз (показана), чтобы указать текущее состояние дисплея.

    # Create a button to toggle the details frame.              
    self._detailsbutton = QToolButton()                                     
    self._detailsbutton.setCheckable(True)                                  
    self._detailsbutton.setChecked(False)                                   
    self._detailsbutton.setArrowType(Qt.RightArrow)                         
    self._detailsbutton.setToolButtonStyle(Qt.ToolButtonIconOnly)           
    self._detailsbutton.toggled.connect(self.showDetails)

По умолчанию QToolButton довольно большой.

введите здесь описание изображения

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

    # Create a button to toggle the details frame.              
    self._detailsbutton = QToolButton()                                     
    self._detailsbutton.setCheckable(True)                                  
    self._detailsbutton.setChecked(False)                                   
    self._detailsbutton.setArrowType(Qt.RightArrow)                         
    self._detailsbutton.setToolButtonStyle(Qt.ToolButtonIconOnly)           
    self._detailsbutton.setFixedSize( 10, 10 )                              
    self._detailsbutton.toggled.connect(self.showDetails)

введите здесь описание изображения

Я попытался установить размер на разные значения (5–15), но стрелка не центрируется правильно ни для одного из них. Кто-нибудь знает, как я могу уменьшить размер кнопки инструмента, сохраняя при этом стрелку в центре? Мне также было бы интересно узнать, как контролировать размер отображаемой стрелки.

Как всегда, если у кого-то есть лучший способ сделать это, я весь внимание.

Бонусные баллы, если вы можете сказать мне, как отключить рамку вокруг кнопки и просто показать голую стрелку на сером фоне.


person jeremiahbuddha    schedule 20.12.2015    source источник
comment
Может быть, это не самый простой способ, но вы можете создать подкласс QToolButton и повторно реализовать paintEvent (я знаю, что в документации PySide есть несколько примеров, которые напрямую переносятся в PyQt)   -  person Croad Langshan    schedule 21.12.2015


Ответы (1)


в Linux и Windows 10 кнопка и стрелка отображаются правильно, поэтому я не могу воспроизвести вашу проблему. Но, как показывает ваш png, изменяется только размер кнопки, стрелка, кажется, имеет старый размер.

Как написано в документации, размер кнопки можно настроить с помощью setIconSize. Так что можете попробовать, это работает на linux

self._detailsbutton.setIconSize(QtCore.QSize(int, int))

Если это не работает, попробуйте установить iconSize в соответствии с размером кнопок инструментов.

bw = 10                                 # buttonWidth
iw = int(bw*.0.8)                       # iconWidth
self._detailsbutton.setFixedSize( bw, bw )
self._detailsbutton.setIconSize(QtCore.QSize(iw,iw))

отключить рамку вокруг кнопки с помощью

self._detailsbutton.setStyleSheet('border: none;')
person a_manthey_67    schedule 22.12.2015