Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何打开小部件,让它做点什么,然后自己关闭?_Python_Pyqt_Pyqt5 - Fatal编程技术网

Python 如何打开小部件,让它做点什么,然后自己关闭?

Python 如何打开小部件,让它做点什么,然后自己关闭?,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我正在努力做到以下几点: 我有一个QMainWindow对象。我想从中打开窗户,让它做点什么,然后自己关上 比如“开始某事>打开加载窗口…”。。消息>做事情>让窗口自行关闭,而不需要用户交互 我曾尝试创建一个QWidget类,并将dothething方法放在其中,但当我在QWidget上调用.show方法时,整个应用程序挂起,无法继续,但可能我不理解其背后的逻辑 我使用的是Python 3.7.7、PyQT5,我的操作系统是Windows 10 x64,如果这很重要的话我希望我正确理解了您的问题

我正在努力做到以下几点:

我有一个QMainWindow对象。我想从中打开窗户,让它做点什么,然后自己关上

比如“开始某事>打开加载窗口…”。。消息>做事情>让窗口自行关闭,而不需要用户交互

我曾尝试创建一个QWidget类,并将dothething方法放在其中,但当我在QWidget上调用.show方法时,整个应用程序挂起,无法继续,但可能我不理解其背后的逻辑


我使用的是Python 3.7.7、PyQT5,我的操作系统是Windows 10 x64,如果这很重要的话

我希望我正确理解了您的问题。我会用以下方法解决这个问题:

from PyQt5 import QtTest
from PyQt5.QtCore import QTimer, Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QVBoxLayout, QWidget

import sys


class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()
        self.loading_window = None
        self.button = QPushButton("Push for Window")
        self.button.clicked.connect(self.show_new_window)
        self.setCentralWidget(self.button)
        self.timer = QTimer()

    def show_new_window(self):
        if self.loading_window is None:
            self.loading_window = LoadingWindow()
        self.loading_window.show()
        self.do_your_job()
        self.close_loading_window()

    def do_your_job(self):
        # Do whatever you want here
        QtTest.QTest.qWait(1500)

    def close_loading_window(self):
        self.loading_window = None


class LoadingWindow(QWidget):

    def __init__(self):
        super().__init__()
        layout = QVBoxLayout()
        self.label = QLabel('Loading')
        layout.addWidget(self.label)
        self.setLayout(layout)
        self.setWindowFlag(Qt.FramelessWindowHint)


app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()

请提供一个是的,这正是我想要做的,非常感谢。因此,流程是-window.show>do_stuff in caller class>dereference window谢谢