Почему нажатие на окно-заставку приводит к тому, что это окно пропадает?(Python, PyQt5)
У меня есть код на Python для отображения окна-заставки, которое выводит изображение и процент загрузки. Нажатие на это окно приводит к его исчезновению. Почему это происходит? Как мне сделать так, чтобы окно не реагировало на нажатия?
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
import time, sys
class MyWindow(QtWidgets.QPushButton):
def __init__(self):
QtWidgets.QPushButton.__init__(self)
self.setText("Закрыть окно")
self.clicked.connect(QtWidgets.qApp.quit)
def load_data(self, sp):
for i in range(1, 11):
time.sleep(0.2)
sp.showMessage("Загрузка данных... {0}%".format(i * 10),
QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom, QtCore.Qt.black)
QtWidgets.qApp.processEvents()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
splash = QtWidgets.QSplashScreen(QtGui.QPixmap("aaa.png"))
splash.showMessage("Загрузка данных... 0%",
QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom, QtCore.Qt.black)
splash.show()
QtWidgets.qApp.processEvents()
window = MyWindow()
window.setWindowTitle("Window")
window.resize(400, 60)
window.load_data(splash)
window.show()
splash.finish(window)
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Причина в том, что это прописано в стандартной логике, что мне кажется очень странным:
void QSplashScreen::mousePressEvent(QMouseEvent *)
{
hide();
}
Предлагаю сделать своего наследника от QSplashScreen и убрать обработку события mousePressEvent:
...
class SplashScreen(QtWidgets.QSplashScreen):
def mousePressEvent(self, event):
return
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
splash = SplashScreen(QtGui.QPixmap("aaa.png"))
splash.showMessage("Загрузка данных... 0%",
QtCore.Qt.AlignHCenter | QtCore.Qt.AlignBottom, QtCore.Qt.black)
splash.show()
...