使用pyside2实现一个终端显示工具

使用pyside2实现一个终端显示工具

  • 使用pyside2实现一个实时终端显示工具
    • 目标
    • 使用到的技术
    • 核心代码
      • 定义信号(Signal)
      • 定义槽函数与相关函数(Slot)
      • 在相关界面代码中加入绑定代码
    • 测试结果
    • pyside2-uic命令(ui文件转python文件)

使用pyside2实现一个实时终端显示工具

目标

通常很多终端执行的指令都是一直长时间运行的,这种情况如何将终端返回的结果显示在gui界面上,如:ping www.baidu.com等操作。最终目的是通过点击一个按钮,将终端的持续输出结果显示在一个文本输入框里。

使用到的技术

  • pyside2的Signal和Slot
  • python的subprocess和threading

核心代码

定义信号(Signal)

# Ui_Main后的参数一定要改为QObject,否则就会提示Signal没有connect和emit这些属性
class Ui_Main(QObject):
	#定义你的信号
    output_str = QtCore.Signal(str)

定义槽函数与相关函数(Slot)

	# 按钮点击触发的函数
    def start_thread(self):
    	# 创建线程执行函数
        t1 = th.Thread(target=self.output)
        print("start")
        t1.start()

	# 执行shell指令
    def output(self):
        for path in self.run("ping -c 5 google.com"):
        	# 发送信号,将终端的返回值作为参数
            self.output_str.emit(str(path)+'\n')

	# shell执行函数,支持长时间运行
    def run(self, command):
        process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
        while True:
            line = process.stdout.readline().rstrip()
            if not line:
                break
            yield line

	# 用于接受信号数据的槽函数
    @Slot(str)
    def update(self,str):
        print(str)
        # 在文本输入框末尾添加新收到的字符数据
        self.textEdit.insertPlainText(str)

在相关界面代码中加入绑定代码

# 按钮点击事件绑定start_thread函数
self.pushButton.clicked.connect(self.start_thread)
# output_str信号绑定update函数
self.output_str.connect(self.update)

测试结果

  1. 点击执行按钮

使用pyside2实现一个终端显示工具_第1张图片
2. 查看输出结果
使用pyside2实现一个终端显示工具_第2张图片

pyside2-uic命令(ui文件转python文件)

pyside2-uic mainwindow.ui > ui_mainwindow.py

你可能感兴趣的:(Python)