Python PyQt5运行程序把输出信息展示到GUI图形界面上
作者:Memory丿浅笑 发布时间:2021-02-08 22:41:59
概述:最近在赶毕业设计,遇到一个问题,爬虫模块我用PyQt5写了图形界面,为了将所有的输出信息都显示到图形界面上遇到了问题。
先演示一下效果最终效果吧,下面两张图用来镇楼。可以看到我们图形界面和程序运行的返回的信息是一样的,并且成功把数据展示到图形界面。
1.怎么获取输出信息。eg:我们平时用编译器,例如pycharm,运行的时候,会有很多信息,或者直接在cmd窗口输入命令的时候,也有同样信息。例如我启动数据库。
cmd窗口下执行命令返回的信息
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系列。就实例话展示一下。
subprocess.getoutput(cmd):返回的是在Linux shell或者windows cmd窗口执行命令返回信息。例如启动数据库。
import subprocess
reply=subprocess.getstatusoutput("net start mysql")
print(reply)
对于上面两种情况,如果你需要状态码和信息就用第二种,只需要返回信息就用第一种。博主用的第二种,因为我需要状态码判断是否成功,因为我的图形界面有消息盒子需要判断。当然你可以根据个人情况而定。
对于问题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')
来源:https://blog.csdn.net/memory_qianxiao/article/details/105753601
猜你喜欢
- 当前登入的用户以及他(她)的权限可以通过 RequestContext 在模板的context中使用。注意从技术上来说,只有当你使用了 Re
- 记录一下安装win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+py
- 生成方式Python中想要自动生成 model文件可以通过 sqlacodegen这个命令来生成对应的model文件sqlacodegen
- 一、愉客行车程监控并通知大概思路:用户填写指定信息在config.json文件中,通过定时访问网页,获取指定信息,从而达到对指定车程的监控1
- 概述编程的内核是数学,而测试的本质是计算,专业名词叫容量预估,而测试的大体就是用程序模拟程序,检测程序的正确性,有两个点需要注意,QPS最佳
- 导语也许是为了和音,在立冬这一天的人间里北方多个城市,悄然降下冬天的第一场初雪,组成了一段旋律💨一天过两季,黄叶转飞花——从天而降落,昼夜不
- 创建项目scrapy startproject zhaoping创建爬虫cd zhaopingscrapy genspider hr zha
- 自己写了一个简单的python脚本,用来推送zabbix告警到钉钉机器人,推送格式为markdown,有需要的可以自己修改markdown的
- 内码问题.用这段代码的吧,我已经改得很精简了.使用XMLHTTP抓取地址并进次内容处理Function GetBody(Url) Dim o
- 本文旨在分类讲述执行计划中每一种操作的相关信息。数据访问操作 首先最基本的操作就是访问数据。这既可以通过直接访问表,也可以通过访问索引来进行
- 问题:在安装SP4补丁的时候,老是报验证密码错误。上网查了一下资料,发现是一个小bug。按照一下操作,安装正常。SQL Server补丁安装
- 前言Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计
- Python tcp socket编程详解初学脚本语言Python,测试可用的tcp通讯程序:服务器:#!/usr/bin/env pyth
- 一般我们能过VS2005的SQL explorer来添加一个本地的MDF文件。也许你可能会出现下面这个问题:Exception Detail
- 数据合并是数据处理过程中的必经环节,pandas作为数据分析的利器,提供了四种常用的数据合并方式,让我们看看如何使用这些方法吧!1.conc
- 线程实现Python中线程有两种方式:函数或者用类来包装线程对象。threading模块中包含了丰富的多线程支持功能:threading.c
- 思路:队列使用说明:multiprocessing.Queue()#用于进程间通信,单主进程与子进程无法通信(使用进程池时尽量不要使用这个)
- 在一些面试或者力扣题中都要求用双向链表来实现,下面是基于python的双向链表实现。一、构建链表节点class Node: &n
- 前言又到了每日分享Python小技巧的时候了,今天给大家分享的是Python中两种常见的数据类型合并方法。1 合并字典在某些场景下,我们需要
- Python2.7对于中文编码的问题处理的并不好,这几天在爬数据的时候经常会遇到中文的编码问题。但是本人对编码原理不了解,也没时间深究其中的