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


猜你喜欢
- 开放平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用使用自定义频率限制组件:utils/thottle.pyclas
- 本文研究的主要是Python使用pickle模块存储数据报错解决方法,以代码的形式展示,具体如下。首先来了解下pickle模块pickle提
- 当数据库服务器变得十分繁忙导致性能下降时,你会怎么办?购买更多的硬件升级你的服务器,还是重新考虑数据库服务器设计使得数据库平台具备良好的可升
- 解决方案:1、选择Edit Configurations, 删除相关单元测试2、右击__name__ == "__main__&q
- 前言:在做一个商城项目的时候,需要实现商品搜索功能。说到搜索,第一时间想到的是数据库的 select * from tb_sku where
- 实例如下所示:#!/usr/bin/python# -*- coding: UTF-8 -*-import reimport urllib,
- 一、简介本章内容主要通过具体的简单示例来分析Vue3是如何实现响应式的。理解本章需要了解Vue3的响应式对象。只注重原理设计层面,细节不做太
- 众所周知,Python使用pip方法安装第三方包时,需要从https://pypi.org/资源库中下载,但是会面临下载速度慢,甚至无法下载
- 什么是Mosaic数据增强方法Yolov4的mosaic数据增强参考了CutMix数据增强方式,理论上具有一定的相似性!CutMix数据增强
- set转成list方法如下: list转成set方法如下:s = set('12342212') &n
- 导语不少人在生活中都有抠人像图换背景的需求。那怎么抠图呢?相信不少人第一时间就想到了 PS 抠图 * ,为了学会 PS 抠图很多人还花费不少精
- 导语幼儿园升小学,小学升中学,中学升高中..........每个人都要经历的九年义务教育:伴随的都是作业、随堂考、以及每个科目的大大小小的考
- 一:crypto库安装pycrypto,pycryptodome是crypto第三方库,pycrypto已经停止更新三年了,所以不建议安装这
- 本文实例讲述了Python列表操作。分享给大家供大家参考,具体如下:#coding=utf8'''''
- 超链接在新窗口打开,是在<a>标签加 target="_blank" 即可。可按下“POST/GET提交按钮
- MySQL根据不同条件联查不同表的数据项目开发中遇到类似的需求。Mybatis 中的< if >标签只能判断where部分,不能
- 1. 什么是索引索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。一张表的一个字段可以添加一个索引,当然,多个字段联合起来也
- 包的引入:import numpy as npimport pandas as pd1. Series 对象的创建1.1 创建一个空的 Se
- 1、命令行工具概述日常命令行操作,相对应的众多命令行工具是提高生产力的必备工具,鼠标能够让用户更容易上手,降低用户学习成本。 而对于开发者,
- 1.在爬虫文件中只需要解析提取出图片地址,然后将地址提交给管道在管道文件对图片进行下载和持久化存储class ImgSpider(scrap