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

作者:Memory丿浅笑 时间:2021-02-08 22:41:59 

概述:最近在赶毕业设计,遇到一个问题,爬虫模块我用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')

来源:https://blog.csdn.net/memory_qianxiao/article/details/105753601

标签:Python,PyQt5,运行程序,GUI,图形界面
0
投稿

猜你喜欢

  • PHP hex2bin()函数用法讲解

    2023-06-06 18:51:35
  • python3发送邮件需要经过代理服务器的示例代码

    2023-07-27 01:00:44
  • HTTP中header头部信息详解

    2023-06-11 23:33:17
  • Python数学建模库StatsModels统计回归简介初识

    2021-05-05 04:57:02
  • 解决oracle用户连接失败的解决方法

    2011-01-04 19:35:00
  • WEB前端开发经验总结 Ⅰ

    2008-06-12 12:23:00
  • pytorch实现CNN卷积神经网络

    2023-07-04 20:23:06
  • python3让print输出不换行的方法

    2021-02-16 20:48:33
  • 远古幻想ICON 1套+创作思路

    2007-09-30 20:33:00
  • Python descriptor(描述符)的实现

    2021-12-22 09:07:56
  • 详解Pycharm出现out of memory的终极解决方法

    2021-12-08 18:14:23
  • Python代码模拟CPU工作原理

    2023-08-04 15:23:49
  • Python读取csv文件实例解析

    2023-01-21 07:47:32
  • SpringBoot 中使用JSP的方法示例

    2023-06-16 22:35:09
  • Django ORM 查询管理器源码解析

    2023-01-30 12:28:47
  • python+tifffile之tiff文件读写方式

    2022-03-16 13:17:41
  • 关于人物角色设计讨论

    2008-10-16 13:47:00
  • asp如何在读取Excel文件时创建列表的下拉菜单?

    2010-06-18 19:59:00
  • RC4经典加密算法asp/VBs版本代码

    2008-02-17 17:32:00
  • Python中五种实现字符串反转的方法

    2023-11-08 00:22:12
  • asp之家 网络编程 m.aspxhome.com