Python PyQt5運行程序把輸出信息展示到GUI圖形界面上
概述:最近在趕畢業(yè)設(shè)計,遇到一個問題,爬蟲模塊我用PyQt5寫了圖形界面,為了將所有的輸出信息都顯示到圖形界面上遇到了問題。
先演示一下效果最終效果吧,下面兩張圖用來鎮(zhèn)樓。可以看到我們圖形界面和程序運行的返回的信息是一樣的,并且成功把數(shù)據(jù)展示到圖形界面。
1.怎么獲取輸出信息。eg:我們平時用編譯器,例如pycharm,運行的時候,會有很多信息,或者直接在cmd窗口輸入命令的時候,也有同樣信息。例如我啟動數(shù)據(jù)庫。
cmd窗口下執(zhí)行命令返回的信息
Pycharm運行的效果
我就想把這種類似輸出的信息,展示到圖形界面上,上面這兩種方法本質(zhì)都是一樣的,都是在向用mysql 命令net start mysql啟動的,前面是在cmd窗口下,后一種是用os.sysytem('net start mysql')。
2.怎么把信息發(fā)送給圖形界面展示。
解決方案:
對于問題1,需要用到PyQt其中一個模塊 :subprocess。看名字大概可以猜到是新開一個進程去執(zhí)行某些功能。由于我是結(jié)合網(wǎng)上資料和源碼進行運用的, 大概簡單說一些吧。
官方源碼中這么說的:
This module allows you to spawn processes, connect to theirinput/output/error pipes, and obtain their return codes.
翻譯過來就是:該模塊允許您生成進程,連接到其輸入/輸出/錯誤管道 并獲取其返回碼。
意思就是新開一個進程去執(zhí)行功能,返回狀態(tài)碼,以及信息。這里要想像cmd里面或者pycharm運行那樣,得到里面的輸出數(shù)據(jù),就要用到subprocess.Popen(cmd),或者subprocess.getstatusoutpu(cmd),subprocess.getoutpu(cmd)。都能獲取到輸出的日志信息,cmd是字符串命令。博主這里用的subprocess.get系列。就實例話展示一下。
subprocess.getoutput(cmd):返回的是在Linux shell或者windows cmd窗口執(zhí)行命令返回信息。例如啟動數(shù)據(jù)庫。
import subprocess reply=subprocess.getstatusoutput('net start mysql')print(reply)
對于上面兩種情況,如果你需要狀態(tài)碼和信息就用第二種,只需要返回信息就用第一種。博主用的第二種,因為我需要狀態(tài)碼判斷是否成功,因為我的圖形界面有消息盒子需要判斷。當(dāng)然你可以根據(jù)個人情況而定。
對于問題2:我這里采用是Pyqt中的信號機制,我把所有信息用信號發(fā)送出去,在用信號函數(shù)接收,連接槽函數(shù)再顯示,因為我的功能比較多,所以需要顯示的數(shù)據(jù),都用信號發(fā)出去。當(dāng)然你的功能單一的話,你可以直接用上面的模塊,得到返回信息顯示就行。比如我這里,有測試功能,連接數(shù)據(jù)庫,關(guān)閉數(shù)據(jù)庫等,我就展示其中一個具體的例子演示。
首先得在一個類中定義信號 eg:show_infoes_signal=pyqtSignal(str) str是參數(shù)
#自定義信號,發(fā)送日志信息,展示到界面 show_infoes_signal=pyqtSignal(str)
在類中init初始化中寫接收信號,連接槽函數(shù)。show_infoes是寫的展示函數(shù)
def __init__(self): self.show_infoes_signal.connect(self.show_infoes)
比如在某個具體功能中發(fā)送信號,并把信息用哪個信號傳出去。例如我的連接數(shù)據(jù)庫的功能。
def connect_mysql(self): self.show_infoes_signal.emit('連接數(shù)據(jù)庫ing....') reply=subprocess.getstatusoutput('net start mysql') #subprocess返回狀態(tài)碼和字符串元組,0成功,其余值失敗 if reply[0]==0: # 發(fā)送數(shù)據(jù)信號 self.show_infoes_signal.emit(reply[-1]) QMessageBox.information(self, '消息', 'Congratulation! 數(shù)據(jù)庫連接成功!') else: self.show_infoes_signal.emit(reply[-1]) QMessageBox.warning(self, '警告', '連接失敗')
在連接數(shù)據(jù)庫功能中,用新進程打開,看狀態(tài)碼是否為0,為0啟動成功,發(fā)送信號并且消息盒子提示連接成功,否則連接失敗。
最后就是展示的槽函數(shù)。當(dāng)我們發(fā)送信號后,就能接收到發(fā)送的信號以及信息,最后把拿到的信息進行展示。
#展示信息槽函數(shù) def show_infoes(self,info): print(info) pre_text=self.show_label.text() self.show_label.setText(pre_text+info+’nn’)
到此這篇關(guān)于Python PyQt5運行程序把輸出信息展示到GUI圖形界面上的文章就介紹到這了,更多相關(guān)Python PyQt5運行程序GUI圖形界面內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. php測試程序運行速度和頁面執(zhí)行速度的代碼2. ASP中常用的22個FSO文件操作函數(shù)整理3. 三個不常見的 HTML5 實用新特性簡介4. Warning: require(): open_basedir restriction in effect,目錄配置open_basedir報錯問題分析5. ASP調(diào)用WebService轉(zhuǎn)化成JSON數(shù)據(jù),附j(luò)son.min.asp6. SharePoint Server 2019新特性介紹7. React+umi+typeScript創(chuàng)建項目的過程8. 無線標記語言(WML)基礎(chǔ)之WMLScript 基礎(chǔ)第1/2頁9. ASP.NET Core 5.0中的Host.CreateDefaultBuilder執(zhí)行過程解析10. php網(wǎng)絡(luò)安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì)探究
