PyQt中使用QProcess运行一个进程的示例代码
作者:smart_cat 发布时间:2021-10-16 15:57:39
一、前言
设计应用程序时,有时不希望将一个不太相关的功能集成到程序中,或者是因为该功能与当前设计的应用程序联系不大,或者是因为该功能已经可以使用现成的程序很好地实现了,这时就可以在当前的应用程序中调用外部的程序来实现该功能,这就会使用到进程。Qt应用程序可以很容易地启动一个外部应用程序,而且Qt也提供了很多种进程间通信的方法。
二、运行一个进程
Qt的QProcess类用来启动一个外部程序并与其通信。要启动一个程序,可以使用start()函数,然后将程序名称和运行这个程序说要使用的命令行参数作为该函数的参数。执行完start()后,QProcess进入Starting状态,当程序已经运行后,QProcess就会进入Running状态并发射started信号。当进程退出后,QProcess重新进入NotRunning状态(初始状态)并发射finished信号。
发射的finished信号提供了进程的退出代码和退出状态,也可以调用exitCode()来获取上一个结束的进程的退出代码,使用exitStatus()来获取它的退出状态。任何时间发生了错误,QProcess都会发射error信号,也可以调用error()来查看错误的类型和上次发生的错误。使用state()可以查看当前进程的状态。
三、启动进程的例子
本例中通过按下按钮,启动了windows系统自带的记事本程序,即notepad.exe, 因为它在windows的系统目录下,该目录已经加在了系统的PATH环境变量中,所以不需要特别指定路径。
运行程序,然后单击按钮,就可以启动记事本程序,可以看到,使用QProcess运行一个外部程序是很简单的。
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QMessageBox
from PyQt5.QtCore import QProcess
import sys
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.__process = QProcess()
self.__btn = QPushButton('start notepad')
self.__init_ui()
# 关联button clicked信号和对应的槽函数
self.__btn.clicked.connect(self.__btn_clicked_handler)
self.__process.started.connect(self.__process_started_handler)
self.__process.finished.connect(self.__process_finished_handler)
def __init_ui(self):
my_layout = QHBoxLayout()
my_layout.addWidget(self.__btn)
self.setLayout(my_layout)
def __btn_clicked_handler(self):
'''
处理button的clicked信号,打开notepad.exe
'''
self.__process.start('notepad.exe')
def __process_started_handler(self):
'''
处理QProcess的started信号
'''
start_msg_box = QMessageBox.information(self,
'info',
'已成功打开记事本',
QMessageBox.StandardButton.Yes,
QMessageBox.StandardButton.Yes)
def __process_finished_handler(self, exitCode, exitStatus):
'''
处理QProcess的finished信号,获取退出状态
'''
finished_msg_box = QMessageBox.information(self,
'info',
f'记事本已关闭, exitcode={exitCode}, exitStatus:{exitStatus}',
QMessageBox.StandardButton.Yes,
QMessageBox.StandardButton.Yes)
if __name__ == '__main__':
app = QApplication(sys.argv)
my_widget = MyWidget()
my_widget.show()
sys.exit(app.exec_())
运行效果如下,
来源:https://blog.csdn.net/hubing_hust/article/details/128364034
猜你喜欢
- 一 概念1. 原理2. 好处不同项目可能用到的环境不同,运用虚拟环境能将不同环境分隔开二 virtualenvvirtual 虚拟的1. 安
- 为啥要写这个脚本五一前的准备下班的时候,看到同事为了做数据库的某个表的数据字典,在做一个复杂的人工操作,就是一个字段一个字段的纯手撸,那速度
- 前言最近有网友私信我,问如何把多张图片合成一张马赛克图片的样子说是女儿从出生到现在,所有的照片,大概有上百张,所以想使用这些照片合成一张,当
- 1、应该将 CSS 放置于结构的上方(一般放置于 head 元素内)。CSS 是解释型语言,Firefox 和 IE 在等待 CSS 传输完
- 代码如下:Function getCurrentUrl() On Error Resume Next Dim strTemp If LCas
- 最近,找到了一种新的pycharm激活方法,支持Jetbrains全家桶,比如 idea、pychram、WebStorm等等,没得zhil
- 前序、中序和后序表达式是什么?对于像B∗C 这样的算术表达式,可以根据其形式来正确地运算。在B∗
- 以前讲过利用phantomjs做爬虫抓网页 https://www.jb51.net/article/55789.htm 是配合选择器做的利
- (可能只有最后一句命令有用,可能全篇都没用)(小白方法,可能只适用于本人情况)安装matplotlib时,出现的三种失败情况1、read t
- 操作系统:Windows2000,IIS5出现症状:使用ASPJPEG时执行Server.CreateObject("Persit
- “深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类型。
- 这篇文章主要介绍了IOS苹果AppStore内购付款的服务器端php验证方法(使用thinkphp)。AppStore内购在app中支付的过
- 1、终极方法:条件注释<!--[if lte IE 6]> 这段文字仅显示在 IE6及IE6以下版本。 <![endif]
- 何为共线性:共线性问题指的是输入的自变量之间存在较高的线性相关度。共线性问题会导致回归模型的稳定性和准确性大大降低,另外,过多无关的维度计算
- 相信各位网页爱好者都对网页的loading很感兴趣吧!,想不想知道如何做一个:)现在给大家介绍一下一种loading的制作..效果图:loa
- Create PROC P_viewPage
- 到2019年初,Python3已经更新到了Python
- <?php ////$strimgsrc = file_get_contents("http://127.0.0.1/530
- 1.获取function形参个数functionName.length2.较适用的运算符delete:删除以前定义的对象属性或方法的引用vo
- 编写断言使用assert编写断言pytest允许你使用python标准的assert表达式写断言;例如,你可以这样做:# test_samp