专栏首页Python编程 pyqt matplotlibPyQt 编程入门(六.3)

PyQt 编程入门(六.3)

本篇介绍两种实时自动更新界面的方法。

1.使用QTimer类(计时器)。用法详见代码和注释:

from PyQt5.QtCore import QTimer from PyQt5.QtWidgets import * import sys

class TestWindow(QDialog): def __init__(self): super().__init__() btn1 = QPushButton("Start", self) btn2 = QPushButton("Stop", self) self.sec_label = QLabel(self)

layout = QGridLayout(self) layout.addWidget(btn1,0,0) layout.addWidget(btn2,0,1) layout.addWidget(self.sec_label,1,0,1,2)

timer = QTimer()#创建计时器 timer.timeout.connect(self.update) # 计时器超时信号连接到用于更新界面的槽 btn1.clicked.connect(lambda :timer.start(1000))#每1000ms发射超时信号 btn2.clicked.connect(timer.stop)#暂停计时器 self.sec = 0#

def update(self): self.sec_label.setText(str(self.sec)) self.sec += 1

app=QApplication(sys.argv) form=TestWindow() form.show() app.exec_()

2.使用QThread类创建多线程,使用子线程实时处理数据,最后将结果显示到界面上,可以处理相对复杂一点的逻辑。用法详见代码和注释:

from PyQt5.QtCore import * from PyQt5.QtWidgets import * import sys

class Test(QDialog):#自定义对话框 def __init__(self,parent=None): super().__init__(parent) self.file_list = QListWidget() self.btn1 = QPushButton('Start') self.btn2 = QPushButton('Stop') layout = QGridLayout(self) layout.addWidget(self.file_list,0,0,1,2) layout.addWidget(self.btn1,1,0) layout.addWidget(self.btn2,1,1) self.thread = Worker() self.thread.file_changed_signal.connect(self.update_file_list) self.btn1.clicked.connect(self.thread_start) self.btn2.clicked.connect(self.thread_stop) def update_file_list(self, file_inf): self.file_list.addItem(file_inf) scrollbar =self.file_list.verticalScrollBar() scrollbar.setValue(scrollbar.maximum())#调整滚动条滑块位置

def thread_start(self): self.btn1.setEnabled(False)#是按钮1失活(不能被点击) self.thread.start()#实质是调用线程的 run 方法

def thread_stop(self): self.btn1.setEnabled(True)#激活按钮1 self.thread.terminate()#停掉线程 def closeEvent(self,event): self.thread.terminate()#结束后台进程 event.accept()#接受关闭 class Worker(QThread): file_changed_signal = pyqtSignal(str) # 信号参数类型:str def __init__(self, sec=0, parent=None): super().__init__(parent) self.working = True self.sec = sec

def __del__(self): self.working = False self.wait()

def run(self): while self.working == True: self.sec += 1 self.file_changed_signal.emit('当前秒数:{}'.format(self.sec)) #三种等待方法都可以: #self.sleep(1) #参数须为int,单位秒 self.msleep(1000) #参数须为int,单位毫秒 #import time; time.sleep(1.0)#参数为float,单位秒 app = QApplication(sys.argv) dlg = Test() dlg.show() sys.exit(app.exec_())

本文分享自微信公众号 - Python编程 pyqt matplotlib(wsplovePython),作者:wsp

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PyQt5 对话框 数据验证

    本篇介绍PyQt5对话框的数据合法性的验证。有两种验证方式:预防式验证(preventative)和 提交后验证 (post-mortem)。预防式验证适合于单...

    用户6021899
  • PyQt5 非模态对话框(apply 型)

    如果希望用户可以重复更改对话框中的参数并能马上看到修改结果,那么就要使用非模态对话框,这样用户就可以按照他们喜欢的方式来持续不断地修改数据并验证修改的结果了。

    用户6021899
  • PyQt5 多文档窗口界面

    本篇介绍多文档窗口界面的写法。代码中并未实现关闭窗口前文档未保存的提醒对话框,因为之前已有介绍。

    用户6021899
  • iOS 自定义分段控制器

    最近做项目时遇到一些问题,就是项目里原有分段控制器的适用范围有些局限,虽然网上也有很多分段控制器的demo,但自己写的,可控性和项目适用性自己能很明白,所以我专...

    清墨
  • Python魔术方法-Magic Method

    目录[-] 介绍 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,例如类的初始化方法 __init__ ,Pyt...

    jhao104
  • Tiknter例子3

    ============================================

    py3study
  • Python魔法方法指南

    什么是魔法方法呢?它们在面向对象的Python的处处皆是。它们是一些可以让你对类添加“魔法”的特殊方法。 它们经常是两个下划线包围来命名的(比如 __init_...

    py3study
  • python 长连接 mysql数据库

    python链接mysql中没有长链接的概念,但我们可以利用mysql的ping机制,来实现长链接功能

    py3study
  • 高效处理流量加解密——Burpy

    先来地址:Github: https://github.com/mr-m0nst3r/Burpy

    用户2202688
  • Seleninum&PhamtomJS爬取煎蛋网妹子图

    mylog.py  日志模块,记录一些爬取过程中的信息,在大量爬取的时候,没有log帮助定位,很难找到错误点

    py3study

扫码关注云+社区

领取腾讯云代金券