Я просто хочу, чтобы некоторые элементы внутри QDialog мигали (изменяя цвет фона).Мигающий виджет с PyQt
Теперь желательно, чтобы я мог использовать что-то, что уже существует, и инкапсулирует мигающее состояние, то есть мигает с помощью css3, или возможно с QPropertyAnimation
?
Поскольку я не нашел хорошую информацию об этой опции я попытался менее оптимальное решение:
отрывок из Диалоги __init__
:
self.timer = QTimer()
self.timer.timeout.connect(self.update_blinking)
self.timer.start(250)
self.last_blinked = None
и
def update_blinking(self):
self.frame.setStyleSheet(
self.STYLE_BLINK_ON if self.blink else self.STYLE_BLINK_OFF)
self.blink = not self.blink
где STYLE_BLINK_ON
и STYLE_BLINK_OFF
- некоторые css, определяющие цвета фона. Это работает, но
- Я считаю, это очень некрасиво, он чувствует, как код из 90-х годов
- Это не может использоваться как частый стиль, обновление прерывает кнопку щелчки.
Пояснение к 2: Предположим, что виджет, который должен мигать, является рамкой. Когда кнопка внутри этого кадра нажата, сигнал clicked
не выдается, если обновление стиля кадра происходит до отпускания кнопки мыши.
Совершенно другое решение, которое инкапсулирует вещи и не требует, чтобы я вручную запускал таймер, было бы, конечно, предпочтительным. Но я был бы признателен, если бы кто-то хотя бы придумал решение, которое решает точку 2.
Эти варианты выглядят намного лучше! Я знаю, что я не был конкретным в своем Вопросе об этом, но мне бы хотелось, если бы ответ также предоставил способ применить анимацию к существующему Виджету, чтобы его можно было включить/выключить – IARI