** class MatchThread(QThread): match_success = pyqtSignal(str) match_failed = pyqtSignal(str) def init(self, match_type, sfname, bdh): super().init() self.match_type = match_type self.sfname = sfname self.bdh = bdh
def run(self):
try:
self.match_success.emit(self.match_type + "匹配成功")
except:
self.match_failed.emit("检查是否只选择一个文件路径。\n且列名为匹配内容。")
** 解析如何使用,使用的是多线程QThread,单独在主线程的之外的线程,pyqtSignal 进行的是一个信号的传递,emit是对一个信号的输出(使用 emit() 方法可以发出信号,通知连接的槽函数执行相应的操作。)。 match_type, sfname, bdh 是类的初始化的参数。
** def do_process(self, match_type): if self.sfname == '' or self.bdh is None: QMessageBox.warning(self, '警告', '请选择匹配文件并加载数据!') return else: self.match_thread = MatchThread(match_type, self.sfname, self.bdh) self.match_thread.match_success.connect(self.on_match_success) self.match_thread.match_failed.connect(self.on_match_failed) self.match_thread.start() def on_match_success(self, message): QMessageBox.information(self, '提示', message) def on_match_failed(self, message): QMessageBox.warning(self, '警告', message)
** connect在信号里面传入,将信号连接到槽函数。例如:sender.signal.connect(receiver.slot) sender 是发出信号的对象,signal 是信号名称,receiver 是接收信号的对象,slot 是槽函数名称。