PyQt中使用QProcess運行一個進程的示例代碼
一、前言
設(shè)計應(yīng)用程序時,有時不希望將一個不太相關(guān)的功能集成到程序中,或者是因為該功能與當前設(shè)計的應(yīng)用程序聯(lián)系不大,或者是因為該功能已經(jīng)可以使用現(xiàn)成的程序很好地實現(xiàn)了,這時就可以在當前的應(yīng)用程序中調(diào)用外部的程序來實現(xiàn)該功能,這就會使用到進程。Qt應(yīng)用程序可以很容易地啟動一個外部應(yīng)用程序,而且Qt也提供了很多種進程間通信的方法。
二、運行一個進程
Qt的QProcess類用來啟動一個外部程序并與其通信。要啟動一個程序,可以使用start()函數(shù),然后將程序名稱和運行這個程序說要使用的命令行參數(shù)作為該函數(shù)的參數(shù)。執(zhí)行完start()后,QProcess進入Starting狀態(tài),當程序已經(jīng)運行后,QProcess就會進入Running狀態(tài)并發(fā)射started信號。當進程退出后,QProcess重新進入NotRunning狀態(tài)(初始狀態(tài))并發(fā)射finished信號。
發(fā)射的finished信號提供了進程的退出代碼和退出狀態(tài),也可以調(diào)用exitCode()來獲取上一個結(jié)束的進程的退出代碼,使用exitStatus()來獲取它的退出狀態(tài)。任何時間發(fā)生了錯誤,QProcess都會發(fā)射error信號,也可以調(diào)用error()來查看錯誤的類型和上次發(fā)生的錯誤。使用state()可以查看當前進程的狀態(tài)。
三、啟動進程的例子
本例中通過按下按鈕,啟動了windows系統(tǒng)自帶的記事本程序,即notepad.exe, 因為它在windows的系統(tǒng)目錄下,該目錄已經(jīng)加在了系統(tǒng)的PATH環(huán)境變量中,所以不需要特別指定路徑。
運行程序,然后單擊按鈕,就可以啟動記事本程序,可以看到,使用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() # 關(guān)聯(lián)button clicked信號和對應(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信號,打開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信號,獲取退出狀態(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_())
運行效果如下,
到此這篇關(guān)于在PyQt中使用QProcess運行一個進程的文章就介紹到這了,更多相關(guān)PyQt使用QProcess運行進程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Pycharm雙擊圖標啟動不了的問題(JetBrains全家桶通用)
這篇文章主要介紹了Pycharm雙擊圖標啟動不了(JetBrains全家桶通用),本文給大家分享問題及解決方法,需要的朋友可以參考下2020-08-08使用Python的Twisted框架實現(xiàn)一個簡單的服務(wù)器
這篇文章主要介紹了使用Python的Twisted框架實現(xiàn)一個簡單的服務(wù)器,翻譯自Twisted的文檔,需要的朋友可以參考下2015-04-04使用Python將字符串轉(zhuǎn)換為格式化的日期時間字符串
這篇文章主要介紹了使用Python將字符串轉(zhuǎn)換為格式化的日期時間字符串,需要的朋友可以參考下2019-09-09使用Python完成SAP客戶端的打開和系統(tǒng)登陸功能
這篇文章主要介紹了使用Python完成SAP客戶端的打開和系統(tǒng)登陸,涉及到SAP的打開和登錄過程,本文重點介紹如何通過Python完成SAP應(yīng)用程序的打開并進入特定的”用戶指定系統(tǒng)“,需要的朋友可以參考下2022-05-05Pytorch中的Tensorboard與Transforms搭配使用
這篇文章主要介紹了Pytorch中的Tensorboard與Transforms搭配使用,主要是結(jié)合了前兩篇文章的的一個小練習(xí),感興趣的小伙伴可以來練習(xí)一下,希望對你的學(xué)習(xí)有所幫助2021-12-12