赞
踩
目录
3,网页交互(QWebEngineView和QWebChannel)
3.2,JS与Pyqt交互(QwebEngineView 和QwebChannel)
3.2.1,PyQt调用js (runJavaSCript)
3.2.2 js调用python程序(QwebChannel)比较复杂。其实是实现了js与python程序调用
3.2.3 runjavaScript和 Qwebchannel传递信息的不同用处
多线程技术涉及三种方法,其中一个是使用计时器模块QTimer,一种是使用多线程模块QThread,还有一种是使用事件处理的功能
如果在应用程序中周期性地进行某项操作,使用QTimer,Qtimer类提供了重复的和单次的定时器要是用定时器,需要先创建一个QTimer实例,将其timeout信号连接到相应的槽,并调用start()。然后,定时器以恒定的间隔发出timeout信号
Qtimer类中常用方法:
start(millseconds):启动或重新自动定时器,时间间隔为毫秒,如果定时已经运行,它将被停止并重新启动,如果sigleShot信号为真,定时器将被激活一次
stop()停止计时器
常用的信号:
signalShot:在给定的时间间隔调用一个槽函数时发射此信号
timeout:当定时器超时时发射此信号
注意:start()之后,每秒都会调用update()
- from PyQt5.QtWidgets import QGridLayout,QApplication,QWidget,QPushButton,QLabel
- import sys
- from PyQt5.QtCore import QTimer,QDateTime
-
- class TimerDemo(QWidget):
- def __init__(self):
- super(TimerDemo, self).__init__()
- self.initUI()
- def initUI(self):
- self.setWindowTitle('demo')
- self.setGeometry(300,300,300,200)
- layout=QGridLayout(self)
- #定义计时器,并连接槽函数
- self.timer=QTimer()
- self.timer.timeout.connect(self.show_time)
-
- self.label=QLabel()
- layout.addWidget(self.label,0,0,1,2)
-
- self.btn1=QPushButton('start',self)
- layout.addWidget(self.btn1,1,0)
- self.btn1.clicked.connect(self.start_program)
-
- self.btn2=QPushButton('end',self)
- layout.addWidget(self.btn2,1,1)
- self.btn2.clicked.connect(self.end_program)
-
- def show_time(self):
- date=QDateTime.currentDateTime()
- now=date.toString('yyyy-MM--dd hh:mm:ss')
- self.label.setText(now)
-
- def start_program(self):
- self.timer.start(1000)
- self.btn1.setEnabled(False)
- self.btn2.setEnabled(True)
- def end_program(self):
- self.timer.stop()
- self.btn2.setEnabled(False)
- self.btn1.setEnabled(True)
-
- if __name__=='__main__':
- app=QApplication(sys.argv)
- demo=TimerDemo()
- demo.show()
- sys.exit(app.exec_())
- from PyQt5.QtWidgets import QLabel,QApplication
- import sys
- from PyQt5.QtCore import QTimer,Qt
-
-
- if __name__ == '__main__':
- app=QApplication(sys.argv)
- label=QLabel('五秒退出')
- label.setWindowFlags(Qt.SplashScreen|Qt.FramelessWindowHint)
- label.show()
- #设置窗口无边框
-
- timer=QTimer()
- timer.singleShot(5000,app.quit)#*********
- sys.exit(app.exec_())
QThread是Qt线程类中最核心的底层类,由于PyQt的跨平台特性,QThread隐藏所有与平台相关的代码
要使用QThread开始一个线程,可以创建它的一个子类,然后覆盖其QThread.run()函数
QThread类中常用的方法和信号:
start():启动线程
wait():阻止线程,知道满足如下条件之一,*与此QThread对象关联的线程已完成执行,即从run()返回时。如果线程
完成执行,此函数将返回True:如果线程尚未启动,此函数也返回True。*等待时间的单位是毫秒,如果事件是ULONG_MAX(默认值)。则等待,永远不会超时。如果等待超时,此函数将返回False
QThread类中常用的信号
started:在开始执行run()函数之前,从相关线程发射此信号
finished:当线程完成业务逻辑时,从相关线程发射此信号
流程:
- class Thread(QThread): #继承QThread
- def __init__(self):
- super(Thread,self).__init__()
- def run(self):
- #线程相关的代码
- passs
- ========================
- #创建一个新的线程
- thread=Thread()
- thread.start()
-
- import sys
- from PyQt5.QtCore import *
- from PyQt5.QtGui import *
- from PyQt5.QtWidgets import *
-
- global sec
- sec = 0
-
-
- class WorkThread(QThread):
- #实例化一个信号对象
- trigger = pyqtSignal()
-
- def __int__(self):
- super(WorkThread, self).__init__()
-
- def run(self):
- #开始进行循环
- for i in range(2000000000):
- pass
-
- # 循环完毕后发出信号
- self.trigger.emit()
-
-
- def countTime():
- global sec
- sec += 1
- # LED显示数字+1
- lcdNumber.display(sec)
-
-
- def work():
- # 计时器每秒计数
- timer.start(1000)
- # 计时开始
- workThread.start()
- # 当获得循环完毕的信号时,停止计数
- workThread.trigger.connect(timeStop)
-
-
- def timeStop():
- #定时器停止
- timer.stop()
- print("运行结束用时", lcdNumber.value())
- global sec
- sec &#
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。