Как автоматически закрыть дочернее окно через некоторое время?

По клику на кнопке 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())    

введите сюда описание изображения

→ Ссылка