1. 程式人生 > 程式設計 >Python PyQt5執行程式把輸出資訊展示到GUI圖形介面上

Python PyQt5執行程式把輸出資訊展示到GUI圖形介面上

概述:最近在趕畢業設計,遇到一個問題,爬蟲模組我用PyQt5寫了圖形介面,為了將所有的輸出資訊都顯示到圖形介面上遇到了問題。

先演示一下效果最終效果吧,下面兩張圖用來鎮樓。可以看到我們圖形介面和程式執行的返回的資訊是一樣的,並且成功把資料展示到圖形介面。

Python PyQt5執行程式把輸出資訊展示到GUI圖形介面上

Python PyQt5執行程式把輸出資訊展示到GUI圖形介面上

1.怎麼獲取輸出資訊。eg:我們平時用編譯器,例如pycharm,執行的時候,會有很多資訊,或者直接在cmd視窗輸入命令的時候,也有同樣資訊。例如我啟動資料庫。

Python PyQt5執行程式把輸出資訊展示到GUI圖形介面上

cmd視窗下執行命令返回的資訊

Python PyQt5執行程式把輸出資訊展示到GUI圖形介面上

Pycharm執行的效果

我就想把這種類似輸出的資訊,展示到圖形介面上,上面這兩種方法本質都是一樣的,都是在向用mysql 命令net start mysql啟動的,前面是在cmd視窗下,後一種是用os.sysytem("net start mysql")。

2.怎麼把資訊傳送給圖形介面展示。

解決方案:

對於問題1,需要用到PyQt其中一個模組:subprocess。看名字大概可以猜到是新開一個程序去執行某些功能。由於我是結合網上資料和原始碼進行運用的, 大概簡單說一些吧。

官方原始碼中這麼說的:

This module allows you to spawn processes,connect to their
input/output/error pipes,and obtain their return codes.

翻譯過來就是:該模組允許您生成程序,連線到其輸入/輸出/錯誤管道 並獲取其返回碼。

意思就是新開一個程序去執行功能,返回狀態碼,以及資訊。這裡要想像cmd裡面或者pycharm執行那樣,得到裡面的輸出資料,就要用到subprocess.Popen(cmd),或者subprocess.getstatusoutpu(cmd),subprocess.getoutpu(cmd)。都能獲取到輸出的日誌資訊,cmd是字串命令。博主這裡用的subprocess.get系列。就例項話展示一下。

Python PyQt5執行程式把輸出資訊展示到GUI圖形介面上

subprocess.getoutput(cmd):返回的是在Linux shell或者windows cmd視窗執行命令返回資訊。例如啟動資料庫。

import subprocess
 
reply=subprocess.getstatusoutput("net start mysql")
print(reply)

Python PyQt5執行程式把輸出資訊展示到GUI圖形介面上

對於上面兩種情況,如果你需要狀態碼和資訊就用第二種,只需要返回資訊就用第一種。博主用的第二種,因為我需要狀態碼判斷是否成功,因為我的圖形介面有訊息盒子需要判斷。當然你可以根據個人情況而定。

對於問題2:我這裡採用是Pyqt中的訊號機制,我把所有資訊用訊號傳送出去,在用訊號函式接收,連線槽函式再顯示,因為我的功能比較多,所以需要顯示的資料,都用訊號發出去。當然你的功能單一的話,你可以直接用上面的模組,得到返回資訊顯示就行。比如我這裡,有測試功能,連線資料庫,關閉資料庫等,我就展示其中一個具體的例子演示。

首先得在一個類中定義訊號 eg:show_infoes_signal=pyqtSignal(str) str是引數

#自定義訊號,傳送日誌資訊,展示到介面
 show_infoes_signal=pyqtSignal(str)

在類中init初始化中寫接收訊號,連線槽函式。show_infoes是寫的展示函式

def __init__(self):
  
  self.show_infoes_signal.connect(self.show_infoes)

比如在某個具體功能中傳送訊號,並把資訊用哪個訊號傳出去。例如我的連線資料庫的功能。

def connect_mysql(self):
  self.show_infoes_signal.emit("連線資料庫ing....")
  reply=subprocess.getstatusoutput("net start mysql")
  #subprocess返回狀態碼和字串元組,0成功,其餘值失敗
  if reply[0]==0:
   # 傳送資料訊號
   self.show_infoes_signal.emit(reply[-1])
   QMessageBox.information(self,"訊息","Congratulation! 資料庫連線成功!")
  else:
   self.show_infoes_signal.emit(reply[-1])
   QMessageBox.warning(self,"警告","連線失敗")

在連線資料庫功能中,用新程序開啟,看狀態碼是否為0,為0啟動成功,傳送訊號並且訊息盒子提示連線成功,否則連線失敗。

最後就是展示的槽函式。當我們傳送訊號後,就能接收到傳送的訊號以及資訊,最後把拿到的資訊進行展示。

 #展示資訊槽函式
 def show_infoes(self,info):
  print(info)
  pre_text=self.show_label.text()
  self.show_label.setText(pre_text+info+'\n\n')

到此這篇關於Python PyQt5執行程式把輸出資訊展示到GUI圖形介面上的文章就介紹到這了,更多相關Python PyQt5執行程式GUI圖形介面內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!