python - 如何打开小部件,让它做某事,然后自行关闭?
问题描述
我正在尝试执行以下操作:
我有一个 QMainWindow 对象。从中,我想打开窗口,让它做一些事情,然后自己关闭。
就像开始某事>使用“正在加载..”消息打开窗口>做某事>让窗口自行关闭而无需用户交互。
我试图创建一个 QWidget 类并将“做事”方法放在那里,但是当我在 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_()
推荐阅读
- sql-server - 如何检查 SQL Server 查询是否从缓存中提取查询结果
- java - 从包含字节数组图像的数据库中获取对象
- c++ - enable_if 在构造函数上
- java - 如何在不跳过其他步骤的情况下手动失败 Serenity bdd 中的步骤
- java - 休眠:在保存无效的 ltree 列时捕获异常
- powershell - 计划任务中的 Send-MailMessage 编码错误
- google-maps - 我试图渲染一千多个标记但它崩溃了..有人可以帮助我吗?
- javascript - 更改 javascript 显示/隐藏文本功能
- c# - 如何使用 c# 从 selenium 中的给定 IwebElement 获取相对 xpath?
- c# - 在 c# 中添加证书 ocsp 权限信息访问和策略扩展