资讯专栏INFORMATION COLUMN

PyQt5+eric6之旅(三) - 多线程应用 - 追加显示

马龙驹 / 2703人阅读

摘要:实时追加显示定义一个发送的信号通过类成员对象定义信号处理业务逻辑下面将输出重定向到中实时显示开始创建线程连接信号开始线程将当前时间输出到文本框目前遇到的问题是使用上遇到很多坑像是菜单工具栏各个按钮之间怎么去绑定特定的槽各种报错然后现在想

实时追加显示

code

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import * 
from PyQt5.QtWidgets import *
import time
import sys

class EmittingStream(QtCore.QObject):  
        textWritten = QtCore.pyqtSignal(str)  #定义一个发送str的信号
        def write(self, data):
            self.textWritten.emit(str(data)) 

class BackendThread(QThread):
     # 通过类成员对象定义信号
    update_date = pyqtSignal(str)

     # 处理业务逻辑
    def run(self):
        while True:
            data = QDateTime.currentDateTime()
            currTime = data.toString("yyyy-MM-dd hh:mm:ss")
            self.update_date.emit( str(currTime) )
            time.sleep(1)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralWidget)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 0, 0, 1, 1)
        self.textEdit = QtWidgets.QTextEdit(self.centralWidget)
        self.textEdit.setObjectName("textEdit")
        self.gridLayout.addWidget(self.textEdit, 1, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralWidget)
        
        #下面将输出重定向到textEdit中
        sys.stdout = EmittingStream(textWritten=self.handleDisplay)  
        sys.stderr = EmittingStream(textWritten=self.handleDisplay)
        
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "实时显示"))
        self.pushButton.setText(_translate("MainWindow", "开始"))

    def initUI(self):
          # 创建线程
        self.backend = BackendThread()
          # 连接信号
        self.backend.update_date.connect(self.handleDisplay)
          # 开始线程
        self.backend.start()

    # 将当前时间输出到文本框
    def handleDisplay(self, data):
        cursor = self.textEdit.textCursor()  
        cursor.movePosition(QtGui.QTextCursor.End)
        # self.textEdit.setText(data)
        cursor.insertText(data + "
")  
        self.textEdit.setTextCursor(cursor)  
        self.textEdit.ensureCursorVisible()

if __name__ == "__main__":
    
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    win = Ui_MainWindow()
    win.setupUi(MainWindow)
    win.initUI()
    MainWindow.show()
    sys.exit(app.exec_())

result

目前遇到的问题是qt designer使用上遇到很多坑,像是菜单,工具栏各个按钮之间怎么去绑定特定的槽,各种报错. 然后现在想到一种方式是,qt designer纯用来设计页面,信号与槽之间的绑定自己写,修修补补. 参考

https://www.cnblogs.com/topsh...

http://www.broadview.com.cn/a...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42058.html

相关文章

  • PyQt5+eric6之旅(二) - qt designer基本操作

    摘要:实时在文本框显示内容引入这个函数绑定定时器自动执行在类中定义一个定时器并在构造函数中设置启动及其信号和槽设置计时间隔并启动计时结束调用方法注意不要加引入这个参考 qt designer使用 开始 新建项目(eric6 项目) 新建窗体(eric6 窗体) 编辑界面(转到qt designer) 保存 编译窗体(转到eric6 窗体) 运行(查看页面效果) 页面缩放效果(qt d...

    2bdenny 评论0 收藏0
  • PyQt5+eric6之旅(一) - 简介与安装配置过程

    摘要:最近想做一个实用的图形界面用于查看实时日志本来是准备用开发原本以为功能简单应该很好上手然而在尝试了几次之后彻底放弃了这个想法首先太老了看上去像是上个世纪的应用界面丑陋这是其一如果只是这样还可以接受然而实际编写过程中发现也不是那么友好优质文档 最近想做一个实用的图形界面用于查看实时日志,本来是准备用tkinter开发,原本以为功能简单应该很好上手,然而,在尝试了几次之后,彻底放弃了这个想...

    王伟廷 评论0 收藏0
  • PyQt5+eric6之旅(四) - 信号与槽的绑定

    摘要:如果编辑了按钮那么接下来就是通过按钮触发某个动作首先右击窗体生成对话框代码绑定按钮接着在代码栏就会看到生成的文件在中创建绑定再次编译打开文件发现已经绑定服务日志运行中播放暂停退出实时日志服务器开始服务密码退出状态信息类 如果编辑了按钮, 那么接下来就是通过按钮触发某个动作 首先右击窗体,生成对话框代码 showImg(https://segmentfault.com/img/bVbem...

    Eidesen 评论0 收藏0
  • Python 小白的 PyQt5 项目实战(1)安装与环境配置

    摘要:工具可以直接使用方式安装和的环境配置使用集成开发工具的小白,在安装库以后,还要对和进行环境配置,将其集成到中。如果小白的或安装在其他路径下,则从对应的目录找到,或者在资源管理器中搜索文件找到安装路径。 ...

    Chao 评论0 收藏0
  • PyQt5 简介

    摘要:是由一系列模块组成。超过个类,函数和方法。有两种证书,和商业证书。包含了窗口系统事件处理图像基本绘画字体和文字类。包含了协议的类。提供了处理数据库的工具。废弃了和的调用方式,使用了新的信号和处理方式。不再支持被标记为废弃的或不建议使用的。 本教程的目的是带领你入门PyQt5。教程内所有代码都在Linux上测试通过。PyQt4 教程是PyQt4的教程,PyQt4是一个Python(同时支...

    sevi_stuo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<