#python #python-3.x #pyqt #pyqt5 #alert
#python #python-3.x #pyqt #pyqt5 #предупреждение
Вопрос:
есть ли способ определить, когда alert
происходит в главном окне? Я знаю, что есть showEvent
и closeEvent
, но есть ли alertEvent
эквивалент?
Что я надеюсь сделать, так это запустить alert
, чтобы встроенные оповещения QApplication могли определять, когда это предупреждение происходит, а также когда это предупреждение очищается. Предупреждение заставит значок панели задач Windows мигать оранжевым цветом, а когда пользователь вернет окно обратно, мигание прекращается и предупреждение очищается.
Проще говоря, я хочу определить, когда начинается мигание и когда заканчивается мигание.
Ниже я опубликую простой фрагмент кода для того, что я думаю.
Main.py
import sys
from PyQt5 import QtCore
from PyQt5 import QtWidgets
import time
class MyMainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.central_widget = QtWidgets.QWidget()
self.setCentralWidget(self.central_widget)
vbox = QtWidgets.QVBoxLayout()
self.central_widget.setLayout(vbox)
self.start_pushButton = QtWidgets.QPushButton()
self.start_pushButton.setText("Alert")
self.start_pushButton.clicked.connect(self.wait)
vbox.addWidget(self.start_pushButton)
def wait(self):
main_window.showMinimized()
time.sleep(2)
print("Alert")
app.alert(self,0)
def event(self,evt):
print(evt)
return True
def alertDetectedJob(self):
print("Alert Detected")
def alertClearedJob(self):
print("Alert Cleared")
app = QtWidgets.QApplication(sys.argv)
main_window = MyMainWindow()
main_window.show()
sys.exit(app.exec_())
Ответ №1:
Протестировано для Windows!
Внимание! В Windows это приводит к тому, что запись на панели задач окна некоторое время мигает. Если мсек равен нулю, мигание прекратится, и запись на панели задач станет другого цвета (в настоящее время оранжевого).
import sys
from PyQt5 import QtCore
from PyQt5 import QtWidgets
#import time
class MyMainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.central_widget = QtWidgets.QWidget()
self.setCentralWidget(self.central_widget)
vbox = QtWidgets.QVBoxLayout()
self.central_widget.setLayout(vbox)
self.start_pushButton = QtWidgets.QPushButton()
self.start_pushButton.setText("Alert")
self.start_pushButton.clicked.connect(self.wait)
vbox.addWidget(self.start_pushButton)
# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.flagWindowDeactivate = False #
self.timer = QtCore.QTimer(self)
self.timer.timeout.connect(self.update_func)
self.timer.start(5500) # 5500
# ^^
def update_func(self):
QtWidgets.QApplication.alert(self, 5000) # 5000
if self.flagWindowDeactivate: # ^
self.alertDetectedJob()
else:
self.alertClearedJob()
def wait(self):
self.showMinimized()
# main_window.showMinimized()
# time.sleep(2)
# print("Alert")
# app.alert(self, 0)
QtWidgets.QApplication.alert(self, 5000) # 5000
# ^
def event(self, event):
# print(event.type())
if event.type() == QtCore.QEvent.WindowDeactivate: # !!!
print('WindowDeactivate')
self.flagWindowDeactivate = True
if event.type() == QtCore.QEvent.WindowActivate: # !!!
print('WindowActivate')
self.flagWindowDeactivate = False
return True
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def alertDetectedJob(self):
print("Alert Detected")
def alertClearedJob(self):
print("Alert Cleared")
app = QtWidgets.QApplication(sys.argv)
main_window = MyMainWindow()
main_window.show()
sys.exit(app.exec_())