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基于phantomjs实现导入图片
May 13 Python
Python处理json字符串转化为字典的简单实现
Jul 07 Python
Python生成数字图片代码分享
Oct 31 Python
python如何统计序列中元素
Jul 31 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
python matplotlib库直方图绘制详解
Aug 10 Python
keras-siamese用自己的数据集实现详解
Jun 10 Python
Python 代码调试技巧示例代码
Aug 11 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 Python
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
Mar 29 Python
Python 制作自动化翻译工具
Apr 25 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 serialize()与unserialize()的用法
2013/06/05 PHP
CI(CodeIgniter)框架配置
2014/06/10 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
prototype1.4中文手册
2006/09/22 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
2010/12/19 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
全面了解Python环境配置及项目建立
2016/06/30 Python
python隐藏终端执行cmd命令的方法
2019/06/24 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
美国围栏公司:Walpole Outdoors
2019/11/19 全球购物
彪马法国官网:PUMA法国
2019/12/15 全球购物
大学在校生求职信范文
2013/11/21 职场文书
工程招投标邀请书
2014/01/30 职场文书
迎八一活动主题
2014/01/31 职场文书
四个太阳教学反思
2014/02/01 职场文书
教师开学感言
2014/02/14 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
浅谈JS的原型和原型链
2021/06/04 Javascript