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,QDateTime
import 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多線程類編寫計數器
QThread
def 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=0
class 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)*n
f=F()
print(f.f(5))