2015-12-20 2 views
0

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

# 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 довольно большой.

enter image description here

Я пытался найти способ, чтобы уменьшить размер этой кнопки. Единственная многообещающая вещь, которую я нашел, это метод 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) 

enter image description here

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

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

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

+0

Может быть, не самый простой способ, но вы можете подклассифицировать QToolButton и повторно реализовать paintEvent (я знаю, что в документах PySide есть несколько примеров, которые прямо переносятся в PyQt) –

ответ

0

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

Как указано in documentation, размер кнопки можно настроить с помощью setIconSize. Таким образом, вы можете попробовать, это работает на Linux

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

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

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;') 
Смежные вопросы