首頁 > 軟體

PyQt中使用QProcess執行一個程序的範例程式碼

2022-12-25 14:01:25

一、前言

設計應用程式時,有時不希望將一個不太相關的功能整合到程式中,或者是因為該功能與當前設計的應用程式聯絡不大,或者是因為該功能已經可以使用現成的程式很好地實現了,這時就可以在當前的應用程式中呼叫外部的程式來實現該功能,這就會使用到程序。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_())

執行效果如下,

到此這篇關於在PyQt中使用QProcess執行一個程序的文章就介紹到這了,更多相關PyQt使用QProcess執行程序內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com