Python PyQt5运行程序把输出信息展示到GUI图形界面上


Posted in Python onApril 27, 2020

概述:最近在赶毕业设计,遇到一个问题,爬虫模块我用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图形界面内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python常见MongoDB数据库操作实例总结
Jul 24 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
Python和Go语言的区别总结
Feb 20 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
Python实现一个带权无回置随机抽选函数的方法
Jul 24 Python
python实现猜拳小游戏
Apr 05 Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 Python
Python实现变声器功能(萝莉音御姐音)
Dec 05 Python
Django ModelForm操作及验证方式
Mar 30 Python
Python使用pyyaml模块处理yaml数据
Apr 14 Python
Opencv python 图片生成视频的方法示例
Nov 18 Python
Python使用Turtle模块绘制国旗的方法示例
Feb 28 Python
使用python实现微信小程序自动签到功能
Apr 27 #Python
Python日志:自定义输出字段 json格式输出方式
Apr 27 #Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 #Python
python logging通过json文件配置的步骤
Apr 27 #Python
Python垃圾回收机制三种实现方法
Apr 27 #Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
Apr 27 #Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
Apr 27 #Python
You might like
无数据库的详细域名查询程序PHP版(1)
2006/10/09 PHP
聊天室php&mysql(三)
2006/10/09 PHP
相对路径转化成绝对路径
2007/04/10 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
javascript是怎么继承的介绍
2012/01/05 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
Python遍历字典方式就实例详解
2019/12/28 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
python遍历路径破解表单的示例
2020/11/21 Python
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
医学护理毕业生自荐信
2013/11/07 职场文书
总账会计岗位职责
2014/03/13 职场文书