Как автоматически закрыть дочернее окно через некоторое время?
По клику на кнопке btn_1
открывается прозрачное окно с квадратом,
как его автоматически закрыть через несколько секунд?
import sys
from PySide6 import QtCore, QtGui, QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.hl = Highlight(self)
self.btn_1 = QtWidgets.QPushButton('btn_1', self)
self.btn_1.clicked.connect(self.highlight)
def highlight(self):
self.hl.showFullScreen()
class Highlight(QtWidgets.QMainWindow):
def __init__(self, parent):
super(Highlight, self).__init__()
self.parent = parent
self.setAttribute(QtCore.Qt.WA_NoSystemBackground, True)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
self.setStyleSheet("background:transparent;")
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
def paintEvent(self, event):
painter = QtGui.QPainter()
painter.begin(self)
painter.setPen(QtGui.QPen(QtCore.Qt.red, 2, QtCore.Qt.SolidLine))
painter.drawRect(500, 500, 100, 100)
painter.end()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
singleShot : bool
Таймер с однократным срабатыванием срабатывает только один раз...
import sys
#from PySide6 import QtCore, QtGui, QtWidgets
from PyQt5 import QtCore, QtGui, QtWidgets
class Highlight(QtWidgets.QMainWindow):
def __init__(self, parent):
super(Highlight, self).__init__()
self.parent = parent
self.setAttribute(QtCore.Qt.WA_NoSystemBackground, True)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
self.setStyleSheet("background:transparent;")
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
def paintEvent(self, event):
painter = QtGui.QPainter()
painter.begin(self)
painter.setPen(QtGui.QPen(QtCore.Qt.red, 2, QtCore.Qt.SolidLine))
painter.drawRect(500, 500, 100, 100)
painter.end()
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.hl = Highlight(self)
self.btn_1 = QtWidgets.QPushButton('btn_1', self)
self.btn_1.clicked.connect(self.highlight)
def highlight(self):
self.hl.showFullScreen()
QtCore.QTimer.singleShot(2000, self.hl.close) # <---- 2 сек
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())