一,前言
当pyQT的主线程界面需要处理耗时的操作容易卡住时,可以考虑用多进程,此时使用多线程还是有可能卡住,但是多进程肯定不会把界面卡住(前提是电脑的内存够用。电脑内存够用时,多线程还是可能会卡住,但是多进程就不会,这就是多进程的优点。)
为什么不直接在pyQT里面使用普通的多进程呢?因为pyQT里面有专门的多进程模块,即QProcess。
使用QProcess一共就俩步骤:
- 创建进程:
process = QtCore.QProcess() - 启动进程:
process.start('cmd.exe', ['dir'])
其中第一个参数是外部程序,后面的列表是给该程序的参数。
二,简单调用.py文件
我们用QProcess来调用.py文件,或者说在.py文件里面写一个子进程完成耗时操作,然后用QProcess调用这个.py文件,让这个.py文件协助我们进行一些耗时操作。可以这样写:
self.process = QProcess()#创建进程
args = []#QProcess调用参数列表,参数可以不止一个,但是第一参数必须是py文件的路径.所有参数都应是字符串形式的,否则可能会报错
process_path = r'C:\237端点\软件\python\pycharm工作路径\试验区\test.py'#这是被调用的py文件的绝对路径
args.append(process_path)
# Qprocess的start函数有两个参数,第一个参数是外部程序,第二个参数是扔给这个外部程序的参数
self.process.start("python", args)
self.process.finished.connect(self.finished)#将子进程结束之后会调用的函数设定为self.finished
上面是关键代码,下面来看具体效果:
首先在同一目录下有两个文件,分别是:process_example1.py和test.py。其中前一个文件有pyQT的图形界面(QProcess将在这里被创建),test是被它调用的py文件,在test里面可以做耗时的操作,它相当于开启了一个子进程。

process_example1.py的代码:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'process_example1.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QApplication, QMainWindow
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(150, 80, 300, 23))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.


453

被折叠的 条评论
为什么被折叠?



