Python PyQt5運(yùn)行程序把輸出信息展示到GUI圖形界面上
概述:最近在趕畢業(yè)設(shè)計(jì),遇到一個(gè)問(wèn)題,爬蟲(chóng)模塊我用PyQt5寫(xiě)了圖形界面,為了將所有的輸出信息都顯示到圖形界面上遇到了問(wèn)題。
先演示一下效果最終效果吧,下面兩張圖用來(lái)鎮(zhèn)樓??梢钥吹轿覀儓D形界面和程序運(yùn)行的返回的信息是一樣的,并且成功把數(shù)據(jù)展示到圖形界面。
1.怎么獲取輸出信息。eg:我們平時(shí)用編譯器,例如pycharm,運(yùn)行的時(shí)候,會(huì)有很多信息,或者直接在cmd窗口輸入命令的時(shí)候,也有同樣信息。例如我啟動(dòng)數(shù)據(jù)庫(kù)。
cmd窗口下執(zhí)行命令返回的信息
Pycharm運(yùn)行的效果
我就想把這種類(lèi)似輸出的信息,展示到圖形界面上,上面這兩種方法本質(zhì)都是一樣的,都是在向用mysql 命令net start mysql啟動(dòng)的,前面是在cmd窗口下,后一種是用os.sysytem("net start mysql")。
2.怎么把信息發(fā)送給圖形界面展示。
解決方案:
對(duì)于問(wèn)題1,需要用到PyQt其中一個(gè)模塊 :subprocess??疵执蟾趴梢圆碌绞切麻_(kāi)一個(gè)進(jìn)程去執(zhí)行某些功能。由于我是結(jié)合網(wǎng)上資料和源碼進(jìn)行運(yùn)用的, 大概簡(jiǎn)單說(shuō)一些吧。
官方源碼中這么說(shuō)的:
This module allows you to spawn processes, connect to their
input/output/error pipes, and obtain their return codes.
翻譯過(guò)來(lái)就是:該模塊允許您生成進(jìn)程,連接到其輸入/輸出/錯(cuò)誤管道 并獲取其返回碼。
意思就是新開(kāi)一個(gè)進(jìn)程去執(zhí)行功能,返回狀態(tài)碼,以及信息。這里要想像cmd里面或者pycharm運(yùn)行那樣,得到里面的輸出數(shù)據(jù),就要用到subprocess.Popen(cmd),或者subprocess.getstatusoutpu(cmd),subprocess.getoutpu(cmd)。都能獲取到輸出的日志信息,cmd是字符串命令。博主這里用的subprocess.get系列。就實(shí)例話(huà)展示一下。
subprocess.getoutput(cmd):返回的是在Linux shell或者windows cmd窗口執(zhí)行命令返回信息。例如啟動(dòng)數(shù)據(jù)庫(kù)。
import subprocess reply=subprocess.getstatusoutput("net start mysql") print(reply)
對(duì)于上面兩種情況,如果你需要狀態(tài)碼和信息就用第二種,只需要返回信息就用第一種。博主用的第二種,因?yàn)槲倚枰獱顟B(tài)碼判斷是否成功,因?yàn)槲业膱D形界面有消息盒子需要判斷。當(dāng)然你可以根據(jù)個(gè)人情況而定。
對(duì)于問(wèn)題2:我這里采用是Pyqt中的信號(hào)機(jī)制,我把所有信息用信號(hào)發(fā)送出去,在用信號(hào)函數(shù)接收,連接槽函數(shù)再顯示,因?yàn)槲业墓δ鼙容^多,所以需要顯示的數(shù)據(jù),都用信號(hào)發(fā)出去。當(dāng)然你的功能單一的話(huà),你可以直接用上面的模塊,得到返回信息顯示就行。比如我這里,有測(cè)試功能,連接數(shù)據(jù)庫(kù),關(guān)閉數(shù)據(jù)庫(kù)等,我就展示其中一個(gè)具體的例子演示。
首先得在一個(gè)類(lèi)中定義信號(hào) eg:show_infoes_signal=pyqtSignal(str) str是參數(shù)
#自定義信號(hào),發(fā)送日志信息,展示到界面 show_infoes_signal=pyqtSignal(str)
在類(lèi)中init初始化中寫(xiě)接收信號(hào),連接槽函數(shù)。show_infoes是寫(xiě)的展示函數(shù)
def __init__(self): self.show_infoes_signal.connect(self.show_infoes)
比如在某個(gè)具體功能中發(fā)送信號(hào),并把信息用哪個(gè)信號(hào)傳出去。例如我的連接數(shù)據(jù)庫(kù)的功能。
def connect_mysql(self): self.show_infoes_signal.emit("連接數(shù)據(jù)庫(kù)ing....") reply=subprocess.getstatusoutput("net start mysql") #subprocess返回狀態(tài)碼和字符串元組,0成功,其余值失敗 if reply[0]==0: # 發(fā)送數(shù)據(jù)信號(hào) self.show_infoes_signal.emit(reply[-1]) QMessageBox.information(self, "消息", "Congratulation! 數(shù)據(jù)庫(kù)連接成功!") else: self.show_infoes_signal.emit(reply[-1]) QMessageBox.warning(self, "警告", "連接失敗")
在連接數(shù)據(jù)庫(kù)功能中,用新進(jìn)程打開(kāi),看狀態(tài)碼是否為0,為0啟動(dòng)成功,發(fā)送信號(hào)并且消息盒子提示連接成功,否則連接失敗。
最后就是展示的槽函數(shù)。當(dāng)我們發(fā)送信號(hào)后,就能接收到發(fā)送的信號(hào)以及信息,最后把拿到的信息進(jìn)行展示。
#展示信息槽函數(shù) def show_infoes(self,info): print(info) pre_text=self.show_label.text() self.show_label.setText(pre_text+info+'\n\n')
到此這篇關(guān)于Python PyQt5運(yùn)行程序把輸出信息展示到GUI圖形界面上的文章就介紹到這了,更多相關(guān)Python PyQt5運(yùn)行程序GUI圖形界面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 關(guān)于python pyqt5安裝失敗問(wèn)題的解決方法
- python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5表格控件QTableView詳細(xì)使用方法與實(shí)例
- python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5控件QTableWidget詳細(xì)使用方法與屬性
- PyQt5的PyQtGraph實(shí)踐系列3之實(shí)時(shí)數(shù)據(jù)更新繪制圖形
- PyQt5高級(jí)界面控件之QTableWidget的具體使用方法
- PyQt5每天必學(xué)之關(guān)閉窗口
- PyQt5 QItemSelection類(lèi)使用小結(jié)
相關(guān)文章
使用python實(shí)現(xiàn)簡(jiǎn)單爬取網(wǎng)頁(yè)數(shù)據(jù)并導(dǎo)入MySQL中的數(shù)據(jù)庫(kù)
這篇文章主要為大家詳細(xì)介紹了如何使用 python 實(shí)現(xiàn)簡(jiǎn)單爬取網(wǎng)頁(yè)數(shù)據(jù)并導(dǎo)入 MySQL 中的數(shù)據(jù)庫(kù),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-06-06從零學(xué)python系列之淺談pickle模塊封裝和拆封數(shù)據(jù)對(duì)象的方法
這個(gè)系列也發(fā)了幾篇文章了,都是個(gè)人的一些學(xué)習(xí)心得的記錄,今天在學(xué)習(xí)文件數(shù)據(jù)處理的時(shí)候了解到有pickle模塊,查找官方文檔學(xué)習(xí)了一些需要用到的pickle內(nèi)容。2014-05-05Python編程實(shí)現(xiàn)粒子群算法(PSO)詳解
這篇文章主要介紹了Python編程實(shí)現(xiàn)粒子群算法(PSO)詳解,涉及粒子群算法的原理,過(guò)程,以及實(shí)現(xiàn)代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11Python?seaborn數(shù)據(jù)可視化繪圖(直方圖,密度圖,散點(diǎn)圖)
這篇文章主要介紹了Python?seaborn數(shù)據(jù)可視化繪圖(直方圖,密度圖,散點(diǎn)圖),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07Django 淺談根據(jù)配置生成SQL語(yǔ)句的問(wèn)題
今天小編就為大家分享一篇Django 淺談根據(jù)配置生成SQL語(yǔ)句的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05用python爬取今日說(shuō)法每期數(shù)據(jù)
大家好,本篇文章主要講的是用python爬取今日說(shuō)法每期數(shù)據(jù),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下2022-02-02pandas取dataframe特定行列的實(shí)現(xiàn)方法
大家在使用Python進(jìn)行數(shù)據(jù)分析時(shí),經(jīng)常要使用到的一個(gè)數(shù)據(jù)結(jié)構(gòu)就是pandas的DataFrame,本文介紹了pandas取dataframe特定行列的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05