網(wǎng)站首頁 編程語言 正文
一、前言
設(shè)計(jì)應(yīng)用程序時(shí),有時(shí)不希望將一個(gè)不太相關(guān)的功能集成到程序中,或者是因?yàn)樵摴δ芘c當(dāng)前設(shè)計(jì)的應(yīng)用程序聯(lián)系不大,或者是因?yàn)樵摴δ芤呀?jīng)可以使用現(xiàn)成的程序很好地實(shí)現(xiàn)了,這時(shí)就可以在當(dāng)前的應(yīng)用程序中調(diào)用外部的程序來實(shí)現(xiàn)該功能,這就會(huì)使用到進(jìn)程。Qt應(yīng)用程序可以很容易地啟動(dòng)一個(gè)外部應(yīng)用程序,而且Qt也提供了很多種進(jìn)程間通信的方法。
二、運(yùn)行一個(gè)進(jìn)程
Qt的QProcess類用來啟動(dòng)一個(gè)外部程序并與其通信。要啟動(dòng)一個(gè)程序,可以使用start()函數(shù),然后將程序名稱和運(yùn)行這個(gè)程序說要使用的命令行參數(shù)作為該函數(shù)的參數(shù)。執(zhí)行完start()后,QProcess進(jìn)入Starting狀態(tài),當(dāng)程序已經(jīng)運(yùn)行后,QProcess就會(huì)進(jìn)入Running狀態(tài)并發(fā)射started信號(hào)。當(dāng)進(jìn)程退出后,QProcess重新進(jìn)入NotRunning狀態(tài)(初始狀態(tài))并發(fā)射finished信號(hào)。
發(fā)射的finished信號(hào)提供了進(jìn)程的退出代碼和退出狀態(tài),也可以調(diào)用exitCode()來獲取上一個(gè)結(jié)束的進(jìn)程的退出代碼,使用exitStatus()來獲取它的退出狀態(tài)。任何時(shí)間發(fā)生了錯(cuò)誤,QProcess都會(huì)發(fā)射error信號(hào),也可以調(diào)用error()來查看錯(cuò)誤的類型和上次發(fā)生的錯(cuò)誤。使用state()可以查看當(dāng)前進(jìn)程的狀態(tài)。
三、啟動(dòng)進(jìn)程的例子
本例中通過按下按鈕,啟動(dòng)了windows系統(tǒng)自帶的記事本程序,即notepad.exe, 因?yàn)樗趙indows的系統(tǒng)目錄下,該目錄已經(jīng)加在了系統(tǒng)的PATH環(huán)境變量中,所以不需要特別指定路徑。
運(yùn)行程序,然后單擊按鈕,就可以啟動(dòng)記事本程序,可以看到,使用QProcess運(yùn)行一個(gè)外部程序是很簡(jiǎn)單的。
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()
# 關(guān)聯(lián)button clicked信號(hào)和對(duì)應(yīng)的槽函數(shù)
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信號(hào),打開notepad.exe
'''
self.__process.start('notepad.exe')
def __process_started_handler(self):
'''
處理QProcess的started信號(hào)
'''
start_msg_box = QMessageBox.information(self,
'info',
'已成功打開記事本',
QMessageBox.StandardButton.Yes,
QMessageBox.StandardButton.Yes)
def __process_finished_handler(self, exitCode, exitStatus):
'''
處理QProcess的finished信號(hào),獲取退出狀態(tài)
'''
finished_msg_box = QMessageBox.information(self,
'info',
f'記事本已關(guān)閉, 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_())
運(yùn)行效果如下,
原文鏈接:https://blog.csdn.net/hubing_hust/article/details/128364034
相關(guān)推薦
- 2022-06-18 Elasticsearches通過坐標(biāo)位置實(shí)現(xiàn)對(duì)附近人的搜索_其它綜合
- 2022-09-07 Python實(shí)現(xiàn)讀取HTML表格?pd.read_html()_python
- 2022-06-21 C語言程序的編譯與預(yù)處理基礎(chǔ)定義講解_C 語言
- 2022-10-11 delphi fmx android 屏幕分辨率
- 2022-04-15 Python3實(shí)現(xiàn)自定義比較排序/運(yùn)算符_python
- 2022-01-22 Springboot + Redis 哨兵模式
- 2023-03-03 react?native圖片解析流程詳解_React
- 2022-06-13 nginx?location/區(qū)別詳解_nginx
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支