Pyside2在子线程中发射信号,主线程中做出响应

class UI_Combin_Docx(QThread):

    messbox_text = Signal(str, str)
    clear_text = Signal()

    def __init__(self):
        super().__init__()
        self.doc = conbin_Docx()

        # 存储选择的单个文件路径
        self.Single_filePath = list()
        # 实例化

        # 保证每次都是从相同的目录开始
        self.sel_root_path = "c:\\"

        # 创建主窗口
        self.creat_window()
        self.btn_select_file.clicked.connect(self.SelFile)
        self.btn_start_combin.clicked.connect(self.Startcombine)

        self.messagebox = QMessageBox(self.window)

        self.messbox_text.connect(self.showMessage)
        self.clear_text.connect(self.clear_Viewtext)
    
    # 这里的参数个数需要信号中的定义参数个数一致
    @Slot(str,str)
    def showMessage(self,title,text):
        self.FilaView.insertPlainText("Combine Complete\n")
        self.messagebox.information(
            self.window,
            title,
            text)

    # 需在主线程中清理界面文件信息,补课在子线程中清理
    @Slot()
    def clear_Viewtext(self):
        self.FilaView.clear()
    
        # 保存文件的操作
    def SaveFile(self,sel_filePath, SavefilePath):

        for file in sel_filePath:
            # self.FilaView.insertPlainText(file)
            # self.FilaView.insertPlainText("\n")
            self.doc.combine_docx(SavefilePath, file)

            if file == sel_filePath[-1]:
                self.messbox_text.emit('合并完成', '合并完成,文件保存在{0}'.format(SavefilePath))
                print("文件合并完毕")
                self.clear_text.emit()
                time.sleep(3)
    
    # 线程启动自动执行run
    def run(self):
        self.SaveFile(self.Single_filePath,self.TempPath)

 

posted @ 2021-03-11 22:05  BISTER  阅读(19)  评论(0)    收藏  举报  来源