import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QProcess
from PyQt5.QtCore import QThread, pyqtSignal, pyqtSlot, QObject, QRunnable, QThreadPool
class WorkerSignals(QObject):
finished = pyqtSignal()
error = pyqtSignal(tuple)
result = pyqtSignal(object)
class Worker(QObject):
def __init__(self, function, *args, **kwargs):
super(Worker, self).__init__()
self.function = function
self.args = args
self.kwargs = kwargs
self.signals = WorkerSignals()
@pyqtSlot()
def run(self):
try:
result = self.function(*self.args, **self.kwargs)
self.signals.result.emit(result) # Emit the result
except Exception as e:
print('error:', e)
self.signals.error.emit((e.__class__, e, e.__traceback__))
finally:
self.signals.finished.emit()
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def start_printer(self, exepath):
try:
# kill_progress_pid(soft_name) # 关闭进程
# judge_process_exist(port=platform_port) # 关闭端口占用
self.process = QProcess(self)
# self.process.start(exepath) # 线程结束, 外部程序也结束
self.process.startDetached(exepath) # 线程结束, 外部程序一直在运行
except:
print(f'{exepath} 启动失败')
def initUI(self):
# 设置主窗口的一些基本属性
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QProcess Example')
exepath = r'C:\Users\administered\Desktop\xxxx.exe'
self.worker = Worker(self.start_printer, exepath)
self.thread = QThread()
self.worker.moveToThread(self.thread)
self.thread.started.connect(self.worker.run)
self.thread.start()
# 显示主窗口
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
sys.exit(app.exec_())
06-13
1834

08-23
2529

11-21
915
