PyQt5中Web操作与多线程定时器

1、装载外部网页页面‘‘‘用web浏览器控件QWebEngineView控件显示网页PyQt5和Web的交互技术

同时使用python和Web开发程序,混合开发

Python+JavaScript+HTML5+CSS技术程序混合可做丰富的UI语言之间互相调用

‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWebEngineWidgets import *import sys

class webview(QMainWindow):    def __init__(self):        super(webview,self).__init__()        self.setWindowTitle("打开外部网页例子")        self.setGeometry(100,100,1355,730)        self.b=QWebEngineView()        self.b.load(QUrl("http://www.baidu.com"))  #设置浏览的网页        self.setCentralWidget(self.b)

if __name__=="__main__":    app=QApplication(sys.argv)    p=webview()    p.show()    sys.exit(app.exec_())

2、显示嵌入的HTML代码加载网页‘‘‘用web浏览器控件QWebEngineView控件显示网页PyQt5和Web的交互技术‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWebEngineWidgets import *import sys

class webHTML(QMainWindow):    def __init__(self):        super(webHTML,self).__init__()        self.setWindowTitle("打开外部网页例子")        self.setGeometry(100,100,1355,730)        self.b=QWebEngineView()

        #直接把HTML网页代码嵌入到python代码中也可以直接显示        self.b.setHtml(‘‘‘        <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>测试页面</title></head><body>    <h1>Hello world </h1>    <h2>Hello world </h2>    <h3>Hello world </h3>    <h4>Hello world </h4></body></html>        ‘‘‘)        self.setCentralWidget(self.b)

if __name__=="__main__":    app=QApplication(sys.argv)    p=webHTML()    p.show()    sys.exit(app.exec_())

3、装载本地网页页面
‘‘‘用web浏览器控件QWebEngineView控件显示网页PyQt5和Web的交互技术

‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWebEngineWidgets import *import sys,os

class webview(QMainWindow):    def __init__(self):        super(webview,self).__init__()        self.setWindowTitle("装载本地网页例子")        self.setGeometry(100,100,1355,730)        self.b=QWebEngineView()

        #装载本地网页        url=os.getcwd()+"/test.html"   #获得本地网页的完整路径        print(url)  #输出当前完整路径        self.b.load(QUrl.fromLocalFile(url))  #设置浏览的网页

        self.setCentralWidget(self.b)

if __name__=="__main__":    app=QApplication(sys.argv)    p=webview()    p.show()    sys.exit(app.exec_())

4、多线程控件-动态显示当前时间QTimer()控件
‘‘‘
多线程(多CPU):用于同时完成多个任务

多线程(并发完成任务)实现方式:QTimer定时器 周期性任务QThread 单个任务

‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtCore import QTimer,QDateTimeimport sys

class showtime(QWidget):    def __init__(self):        super(showtime,self).__init__()        self.setWindowTitle("动态显示当前时间")        #self.resize(800,300)

        self.lable=QLabel("显示当前时间")        self.startbtn=QPushButton("开始按钮")        self.endbtn=QPushButton("结束按钮")        layout=QGridLayout()

        #创建一个计时器QTimer()        self.timer=QTimer()        self.timer.timeout.connect(self.showtime)

        layout.addWidget(self.lable,0,0,1,2)        layout.addWidget(self.startbtn,1,0)        layout.addWidget(self.endbtn,1,1)

        self.startbtn.clicked.connect(self.starttime)        self.endbtn.clicked.connect(self.endtime)        self.setLayout(layout)    def showtime(self):        time=QDateTime.currentDateTime()        timedispaly=time.toString("yyyy-MM-dd hh:mm:ss dddd")        self.lable.setText(timedispaly)    def starttime(self):        self.timer.start(1000)  #设置定时器时间间隔为1秒        self.startbtn.setEnabled(False)        self.endbtn.setEnabled(True)    def endtime(self):        self.timer.stop()       #定时器停止        self.startbtn.setEnabled(True)        self.endbtn.setEnabled(False)

if __name__=="__main__":    app=QApplication(sys.argv)    p=showtime()    p.show()    sys.exit(app.exec_())

5、定时关闭窗口
‘‘‘定时关闭窗口和程序QTimer.singleShot方法(定时器时间间隔,所需运行程序)指定一定的时间来运行程序一次‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *import sys

if __name__=="__main__":    app=QApplication(sys.argv)    label=QLabel("<font color=red size=140><b>Hello World,窗口在5秒后自动关闭!</b></font>")    label.setWindowFlags(Qt.SplashScreen | Qt.FramelessWindowHint)    label.show()    QTimer.singleShot(5000,app.quit)  #设置显示时间为5秒    sys.exit(app.exec_())

6、多线程计数器QThread()类
‘‘‘多线程(多CPU):用于同时完成多个任务QThread多线程类编写计数器

QThreaddef run(self):    while True:        self.sleep(1)        if sec==5:           break;

QLCDNumber

WorkThread(Qthread)用到自定义信号

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

#先定义多线程类和不同的发射信号sec=0class WorkThread(QThread):    timer=pyqtSignal() #定义一个信号类    end=pyqtSignal()   #定义一个信号    def run(self):        while True:            self.sleep(1)        #休眠1秒            if sec==5:                self.end.emit()   #发送end信号                break            self.timer.emit()     #发送timer信号

class counter(QWidget):    def __init__(self):        super(counter,self).__init__()        self.setWindowTitle("线程类控件编写计数器")        self.resize(300,120)

        layout=QVBoxLayout()        self.lcdnumber=QLCDNumber()   #创建一个QLCD控件显示计数器数字        layout.addWidget(self.lcdnumber)

        btn=QPushButton("开始计数")        layout.addWidget(btn)

        self.workthread=WorkThread()  #定义一个初始化的多线程类        self.workthread.timer.connect(self.counttime)  #将信号与槽函数连接        self.workthread.end.connect(self.end)        btn.clicked.connect(self.work)        self.setLayout(layout)

    def counttime(self):        global sec        sec+=1        self.lcdnumber.display(sec)    #用QLCD控件形式显示计数器    def end(self):        QMessageBox.information(self,"消息","计时5秒结束",QMessageBox.Ok)    def work(self):        self.workthread.start()

if __name__=="__main__":    app=QApplication(sys.argv)    p=counter()    p.show()    sys.exit(app.exec_())

7、Python调用JavaScript
‘‘‘Python与JavaScript相互交互,数据交换

‘‘‘from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWebEngineWidgets import *import sys,os

class webview(QWidget):    def __init__(self):        super(webview,self).__init__()        self.setWindowTitle("python调用JavaScript代码")        self.setGeometry(100,100,1355,730)        self.layout=QVBoxLayout()        self.setLayout(self.layout)

        self.b=QWebEngineView()        url=os.getcwd()+"/tt.html"        self.b.load(QUrl.fromLocalFile(url))  #设置浏览的网页        self.layout.addWidget(self.b)

        self.btn=QPushButton("设置全名")        self.btn.clicked.connect(self.fullname)        self.layout.addWidget(self.btn)    def js(self,result):        print(result)    def fullname(self):        self.value="hello world"        self.b.page().runJavaScript(‘fullname("‘+ self.value+‘");‘,self.js) #运行JavaScript代码

if __name__=="__main__":    app=QApplication(sys.argv)    p=webview()    p.show()    sys.exit(app.exec_())
JavaScript代码(HTML网页设置代码):
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>测试页面</title>    <script>        function fullname(value) {            alert(value)            var firstname=document.getElementById("firstname").value;            var lastname=document.getElementById("lastname").value;

            var fullname=firstname+" "+lastname;

            document.getElementById("fullname").value=fullname;            document.getElementById("submit-btn").style.display="block";            return fullname        }    </script></head><body>    <form>        <label>First Name</label>        <input type="text" name="firstname" id="firstname"></input>        <br/>        <label>Last Name</label>        <input type="text" name="lastname" id="lastname"></input>        <br/>        <label>Full Name</label>        <input type="text" name="fullname" id="fullname"></input>        <br/>        <input style="display: none;" type="submit" id="submit-btn"/>    </form></body></html>

8、JavaScript调用个python函数进行计算阶乘
‘‘‘Python与JavaScript相互交互,数据交换将python一个对象映射到JavaScript当中

将槽函数映射到JavaScript中编辑一个计算阶乘的类,利用递归的方法‘‘‘from PyQt5.QtCore import *class F(QObject):    def f(self,n):        if n==0 or n==1:            return 1        else:            return self.f(n-1)*nf=F()print(f.f(5))


原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/12308193.html

时间: 2024-11-01 10:28:31

PyQt5中Web操作与多线程定时器的相关文章

Java中基本知识梳理【定时器实现多线程】-----2015年3月15日

Timer介绍: (1)基本方法: public Timer():创建一个新计时器.相关的线程不 作为守护程序运行. public void schedule(TimerTask task, long delay, long period) 安排指定的任务从指定的延迟后开始进行重复的固定延迟执行.以近似固定的时间间隔(由指定的周期分隔)进行后续执行. public void schedule(TimerTask task, Date time) 安排在指定的时间执行指定的任务.如果此时间已过去,

C#中利用委托实现多线程跨线程操作

在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了保证线程安全以及提高代码的效率所做的改进,但是也给大家带来很多不便. 其实解决这个问题有两种方法:一,是通过设置System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;在你的程序初始化的时候设置了这个属性,而且在你的控件中使用的都是微软Framework类库中的控件的话,系统就不会再抛出你上面所说的

html5之Web Worker -- js多线程编程

什么是Web Worker? web worker 是运行在后台的 JavaScript,不占用浏览器自身线程,独立于其他脚本,可以提高应用的总体性能,并且提升用户体验. 一般来说Javascript和UI页面会共用一个线程,在HTML页面中执行js脚本时,页面的状态是不可响应的,直到脚本已完成.而这段代码可以交给Web Worker在后台运行,那么页面在Javascript运行期间依然可以响应用户操作.后台会启动一个worker线程来执行这段代码,用户可以创建多个worker线程. 有两种 W

深入浅出Zabbix 3.0 -- 第二章 Zabbix Web操作与定义

第二章  Zabbix Web操作与定义 本章介绍Zabbix 中一些基本概念的定义和web前端页面的操作,包括Zabbix中使用的一些术语的定义,Web页面中用户管理.主机和主机组的管理,以及监控项.模板.触发器.告警的管理和操作,还有Graphs.Screens.Maps及Reports等.通过本章的学习掌握一些基本概念并能够通过Web页面的操作完成对Zabbix的管理. 2.1 定义 hosts(主机) Zabbix中需要监控的服务器.交换机及其他设备我们都统一称作host,这些设备与Za

ios中的几种多线程实现

iOS 支持多个层次的多线程编程,层次越高的抽象程度越高,使用起来也越方便,也是苹果最推荐使用的方法.下面根据抽象层次从低到高依次列出iOS所支持的多线程编程范式:1, Thread;2, Cocoa operations;3, Grand Central Dispatch (GCD) (iOS4 才开始支持)下面简要说明这三种不同范式:Thread 是这三种范式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步.线程共享同一应用程序的部分内存空间,它

.Net中如何操作IIS

Net中实际上已经为我们在这方面做得很好了.FCL中提供了不少的类来帮助我们完成这项工作,让我们的开发工作变非常简单和快乐.编程控制IIS实际上很简单,和ASP一样,.Net中需要使用ADSI来操作IIS,但是此时我们不再需要GetObject这个东东了,因为.Net为我们提供了更加强大功能的新东东. System.DirectoryServices命名空间中包括了些强大的东东--DirectoryEntry,DirectoryEntries,它们为我们提供了访问活动目录的强大功能,在这些类允许

Delphi中的操作二进制文件的两个重要函数

Delphi中的操作二进制文件的两个重要函数 对于通过Byte数组进行文件操作的,在FTP中经常会使用到,我也是在Delphi调用Web Service进行文件的上传和下载时找到这两个函数的,挺好用的,推荐给大家.(申明:非本人所写) 1. 将Byte数组生成文件 procedure ByteArrayToFile(const ByteArray : TByteDynArray; const FileName : string );var Count: integer; F: FIle of B

[JAVA_开课吧资源]第五周 I/O操作、多线程、网络编程技术

主题一 I/O操作 » 流的概念 在面向对象语言中, 数据的输入和输出都是通过数据流来实现的.数据流是一组有顺序.有起点和终点的字符集合.就好比是两个不同的池子,一个池子中存满了水,而另一个池子中则没有任何的东西,在这两个水池中安放一个管子,水就可以从一个池子流向另一个池子了.在从一个池子向另一个池子输送水的过程中,水扮演的角色就是数据流. [请点击查看更多内容 转自文章] » Stream stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源.在Java的IO中,所有

eclipse中web项目部署以后jsp的java文件找不到问题(Tomcat配置serverlocations)

我的开发环境:eclipse kepler (4.3)+tomcat7.0.42. 在我想看eclipse中web项目jsp文件被tomcat转换成java以后的java源文件的位置,发现正常情况下的webapps以下,没有看到我部署的项目 同一时候,work文件夹(jsp的工作文件夹)以下也没有生成相关的jsp的class文件和java源文件.可是我想看源代码啊.找了一堆关于jsp的源代码位置的文章,都说是在work以下能够找到.后来在不断的尝试下,我搜索了keyword server loc