У меня проблема с обновлением иконки кнопки, установленной с QToolButton
. Идея состоит в том, чтобы использовать кнопку для игрока mov ie. Для воспроизведения нажмите кнопку, и значок изменится на паузу. При повторном нажатии воспроизведение приостанавливается, и значок возвращается к воспроизведению. У меня есть рабочий код, но проблема в том, что значок не обновляется постоянно. Если я держу окно Qt в фокусе, требуется одно или два нажатия кнопок, чтобы изменить значок на нужное изображение, и к тому времени фактическое изображение не является предполагаемым изображением (воспроизведение / пауза с заменой).
Вот пример минимального кода:
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget, QStyle, QToolButton
class Widget(QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent=parent)
self.play_button = QToolButton(clicked=self.update_button)
self.play_button.setIcon(self.style().standardIcon(QStyle.SP_MediaStop))
self.verticalLayout = QVBoxLayout(self)
self.verticalLayout.addWidget(self.play_button)
self.button_pressed = False
def update_button(self):
if self.button_pressed:
self.play_button.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
self.button_pressed = False
print("Button should be set to PLAY. Press is", self.button_pressed)
else:
self.play_button.setIcon(self.style().standardIcon(QStyle.SP_MediaPause))
self.button_pressed = True
print("Button should be set to PAUSE. Press is", self.button_pressed)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
В приведенном выше примере я начинаю со значка остановки, чтобы быть уверенным в изменении (любой щелчок всегда должен менять значок). Сосредоточив окно, я получаю следующий вывод:
- 1-й щелчок: «Кнопка должна быть установлена на ПАУЗУ. Нажать« Истина »(без изменений в значке)
- 2-й щелчок: «Кнопка должна быть установлена на PLAY. Нажатие является ложным» (значок изменяется на паузу)
- 3-й щелчок: «На кнопке должно быть установлено значение PAUSE. Нажмите True» (значок меняется на воспроизведение) (и т. Д., продолжает обмениваться должным образом)
Я также заметил, что если после каждого щелчка я щелкаю за пределами окна Qt или изменяю размер окна Qt, значок кнопки обновляется до правильного. Что я делаю неправильно? Как заставить значок обновиться?
Такое поведение в основном происходит с QToolButton
, но QPushButton
также вызывает проблемы (работает, когда фокусируется, но неправильно ведет себя / теряет отслеживание правильного состояния, если я изменяю размер окна Qt ). Использование PyQt 5.12.3 и qt 5.12.5 в macOS.