python pyside2 进度条窗口,执行结束后,启动另一个窗口

进度条窗口


from PySide2.QtCore import *
from PySide2.QtWidgets import *
import sys,os,time
import PySide2
from b窗口 import MyMainWindow

dirname = os.path.dirname(PySide2.__file__)
plugin_path = os.path.join(dirname, 'plugins', 'platforms')
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        self.dialog = Dialog
        if not Dialog.objectName():
            Dialog.setObjectName(u"Dialog")
        Dialog.resize(617, 66)
        self.verticalLayout = QVBoxLayout(Dialog)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.progressBar = QProgressBar(Dialog)
        self.progressBar.setObjectName(u"progressBar")
        self.progressBar.setRange(0, 100)  # 设置进度范围(最小值, 最大值)
        self.progressBar.setValue(0)  # 设置初始值

        self.verticalLayout.addWidget(self.progressBar)


        self.retranslateUi(Dialog)

        QMetaObject.connectSlotsByName(Dialog)
        self.run_on_start()
    # setupUi

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None))
    # retranslateUi
    def run_on_start(self):
        """启动时自动执行的任务"""

        # 启动后台线程执行耗时任务
        self.thread = ProgressThread()
        # 执行时更新进度条
        self.thread.progress_updated.connect(self.progressBar.setValue)
        # 执行完成时执行的函数
        self.thread.finished.connect(self.task_finished)
        # 启动线程
        self.thread.start()

    def task_finished(self):
        print("执行完成")
        # 关键,创建的对象,必须赋值给成员变量,不能赋值给局部变量,否则窗口闪退
        self.window = MyMainWindow()  # 该类是生成的类名
        self.window.show()
        # 当前窗口关闭
        self.dialog.close()

class ProgressThread(QThread):
    progress_updated = Signal(int)  # 用于发送进度信号

    def run(self):
        for i in range(1,101):
            self.progress_updated.emit(i)  # 发送当前进度
            time.sleep(0.05)  # 模拟任务耗时



if __name__ == "__main__":
  app = QApplication(sys.argv)
  form = QWidget()
  uiform = Ui_Dialog()  # 该类是生成的类名
  uiform.setupUi(form)
  form.show()
  app.exec_()

另一个窗口

import sys
from PySide2.QtWidgets import QMainWindow, QApplication, QWidget,QDialog
from UI_MainWindow import Ui_Dialog

# 各个平台一致的UI界面
QApplication.setStyle("Fusion")

class MyMainWindow(QWidget):
  def __init__(self):
    super().__init__()
    self.window = Ui_Dialog()
    self.window.setupUi(self)
    self.initUI()

  def initUI( self ):
    # 点击事件连接槽函数
    self.window.sendBtn.clicked.connect(self.send)

  # 发送
  def send(self):
    print("Hello World!")



if __name__ == "__main__":
  app = QApplication(sys.argv)
  window = MyMainWindow()  # 该类是生成的类名
  window.show()
  # 启动事件循环
  app.exec_()

原文出处:/show_1GW1s9JxzsHf.html