pyqt5讲解9:时间模块timer和网页交互
time
如果要在應(yīng)用程序中周期性地進(jìn)行某項(xiàng)操作,則需要用到QTimer定時(shí)器,QTimer類提供了重復(fù)的和單次的定時(shí)器。要使用定時(shí)器,需要先創(chuàng)建一個(gè)QTimer實(shí)例,將其timeout信號(hào)連接到相應(yīng)的槽,并調(diào)用start()。然后定時(shí)器會(huì)以恒定的間隔發(fā)出timeout信號(hào),當(dāng)窗口控件收到timeout信號(hào)后,它就會(huì)停止這個(gè)定時(shí)器。
常用方法
| start(milliseconds) | 啟動(dòng)或重新啟動(dòng)定時(shí)器,時(shí)間間隔為毫秒。如果定時(shí)器已經(jīng)運(yùn)行,它將被停止并重新啟動(dòng)。如果singleShot信號(hào)為真,定時(shí)器將僅被激活一次 |
| Stop() | 停止定時(shí)器 |
常用信號(hào)
| singleShot | 在給定的時(shí)間間隔后調(diào)用一個(gè)槽函數(shù)時(shí)發(fā)射此信號(hào) |
| timeout | 當(dāng)定時(shí)器超時(shí)時(shí)發(fā)射此信號(hào) |
算例1
# -*- coding: utf-8 -*- '''【簡(jiǎn)介】PyQT5中 QTimer例子'''from PyQt5.QtWidgets import QWidget, QPushButton , QApplication ,QListWidget, QGridLayout , QLabel from PyQt5.QtCore import QTimer ,QDateTime import sys class WinForm(QWidget): def __init__(self,parent=None): super(WinForm,self).__init__(parent) self.setWindowTitle("QTimer demo")self.listFile= QListWidget() self.label = QLabel('顯示當(dāng)前時(shí)間')self.startBtn = QPushButton('開始') self.endBtn = QPushButton('結(jié)束') layout = QGridLayout(self) # 初始化一個(gè)定時(shí)器self.timer = QTimer(self)# showTime()方法self.timer.timeout.connect(self.showTime)layout.addWidget(self.label,0,0,1,2) layout.addWidget(self.startBtn,1,0) layout.addWidget(self.endBtn,1,1) self.startBtn.clicked.connect( self.startTimer) self.endBtn.clicked.connect( self.endTimer) self.setLayout(layout) def showTime(self): # 獲取系統(tǒng)現(xiàn)在的時(shí)間time = QDateTime.currentDateTime() # 設(shè)置系統(tǒng)時(shí)間顯示格式timeDisplay = time.toString("yyyy-MM-dd hh:mm:ss dddd");# 在標(biāo)簽上顯示時(shí)間self.label.setText( timeDisplay ) def startTimer(self): # 設(shè)置計(jì)時(shí)間隔并啟動(dòng)self.timer.start(1000)self.startBtn.setEnabled(False)self.endBtn.setEnabled(True)def endTimer(self): self.timer.stop()self.startBtn.setEnabled(True)self.endBtn.setEnabled(False)if __name__ == "__main__": app = QApplication(sys.argv) form = WinForm() form.show() sys.exit(app.exec_())會(huì)一直不斷的更新時(shí)間
首先初始化一個(gè)定時(shí)器,把定時(shí)器的timeout信號(hào)與showTime()槽函數(shù)連接起來
self.timer=QTimer(self)
self.timer.timeout.connect(self.showTime)
使用連接的槽函數(shù)顯示當(dāng)前時(shí)間,并在標(biāo)簽上顯示系統(tǒng)當(dāng)前的時(shí)間
def showTime(self):
#獲取系統(tǒng)當(dāng)前時(shí)間
time=QDateTime.currentDateTime()
#設(shè)置系統(tǒng)時(shí)間的顯示格式
timeDisplay=time.toString(‘yyyy-MM-dd hh:mm:ss dddd’)
#在標(biāo)簽上顯示時(shí)間
self.lable.setText(timeDisplay)
單擊開始按鈕,啟動(dòng)定時(shí)器,并使按鈕失效
#設(shè)置時(shí)間間隔并啟動(dòng)定時(shí)器
self.timer.start(1000)
#設(shè)置開始按鈕不可點(diǎn)擊,結(jié)束按鈕可點(diǎn)擊
self.startBtn.setEnabled(False)
self.endBtn.setEnabled(True)
單擊結(jié)束按鈕,停止定時(shí)器,并使按鈕失效
#停止定時(shí)器
self.timer.stop()
#結(jié)束按鈕不可點(diǎn)擊,開始按鈕可以點(diǎn)擊
self.startBtn.setEnabled(True)
self.endBtn.setEnabled(False)
10秒后窗口消失
彈出的窗口會(huì)在10秒后消失,模仿程序的啟動(dòng)界面,將彈出的窗口設(shè)置為無邊框
#設(shè)置無邊框窗口
label.setWindowFlags(Qt.SplashScreen|Qt.FramelessWindowHint)
使用QTimer設(shè)置時(shí)間間隔,10秒后退出程序
#設(shè)置10秒后自動(dòng)退出
QTimer.singleShot(10000,app.quit)
網(wǎng)頁交互
PyQt5 使用 QWebEngineView 控件來展示 HTML 頁面,WebEngine 框架時(shí)基于谷歌的 Chromium 引擎開發(fā)。
QWebEngine 類常用方法如下:
| load(QUrl url) | 加載指定的 URL 并顯示 |
| setHtml(QString &html) | 將網(wǎng)頁視圖的內(nèi)容設(shè)置為指定的 HTML 內(nèi)容 |
注意事項(xiàng)
說明下 如果算例出現(xiàn)錯(cuò)誤
from PyQt5.QtWebEngineWidgets import *
ImportError: DLL load failed: 找不到指定的程序。
則需要先安裝下PyQtWebEngine
pip install PyQtWebEngin
算例1
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Author: yudengwu # @Date : 2020/8/31import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import *from PyQt5.QtWebEngineWidgets import * class MainWindow(QMainWindow):def __init__(self):super(MainWindow, self).__init__()self.setWindowTitle('WebViewTest')#self.setWindowIcon(QIcon("./images/Python2.ico"))self.setGeometry(5, 30, 1355, 730)self.browser = QWebEngineView()# 加載外部的 Web 頁面self.browser.load(QUrl('https://blog.csdn.net/KOBEYU652453'))self.setCentralWidget(self.browser)if __name__ == "__main__":app = QApplication(sys.argv)win = MainWindow()win.show()sys.exit(app.exec_())算例2
# -*- coding: utf-8 -*-'''【簡(jiǎn)介】QWebEngineView 打開本地網(wǎng)頁例子'''from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtWebEngineWidgets import * import sysclass MainWindow(QMainWindow):def __init__(self):super(QMainWindow, self).__init__()self.setWindowTitle('加載并顯示本地頁面例子')self.setGeometry(5, 30, 755, 530)self.browser = QWebEngineView()# 加載本地頁面url = r'D:/deeplearn/學(xué)習(xí)草稿/index.html'self.browser.load(QUrl(url))self.setCentralWidget(self.browser)if __name__ == '__main__':app = QApplication(sys.argv)win = MainWindow()win.show()sys.exit(app.exec_())index.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Test</title> </head> <body><h1>Hello PyQt5</h1><h1>Hello PyQt5</h1><h1>Hello PyQt5</h1><h1>Hello PyQt5</h1><h1>Hello PyQt5</h1><h1>Hello PyQt5</h1><h1>Hello PyQt5</h1><h1>Hello PyQt5</h1> </body> </html>算例3
# -*- coding: utf-8 -*- '''【簡(jiǎn)介】QWebView打開網(wǎng)頁例子 '''from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtWebEngineWidgets import * import sysclass MainWindow(QMainWindow):def __init__(self ):super(QMainWindow, self).__init__()self.setWindowTitle('QWebView打開網(wǎng)頁例子')self.setGeometry(5, 30, 1355, 730)self.browser = QWebEngineView()#1 加載html代碼self.browser = QWebEngineView()self.browser.setHtml('''<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title></head><body><h1>Hello PyQt5</h1><h1>Hello PyQt5</h1><h1>hello PyQt5</h1><h1>hello PyQt5</h1><h1>hello PyQt5</h1><h1>Hello PyQt5</h1></body></html>''')self.setCentralWidget(self.browser)if __name__ == '__main__':app = QApplication(sys.argv)win = MainWindow()win.show()sys.exit(app.exec_())算例4
# -*- coding: utf-8 -*- '''【簡(jiǎn)介】QWebView中網(wǎng)頁調(diào)用JavaScript '''from PyQt5.QtWidgets import QApplication , QWidget , QVBoxLayout , QPushButton from PyQt5.QtWebEngineWidgets import QWebEngineView import sys# 創(chuàng)建一個(gè) application實(shí)例 app = QApplication(sys.argv) win = QWidget() win.setWindowTitle('Web頁面中的JavaScript與 QWebEngineView交互例子')# 創(chuàng)建一個(gè)垂直布局器 layout = QVBoxLayout() win.setLayout(layout)# 創(chuàng)建一個(gè) QWebEngineView 對(duì)象 view = QWebEngineView() view.setHtml('''<html><head><title>A Demo Page</title><script language="javascript">// Completes the full-name control and// shows the submit buttonfunction completeAndReturnName() {var fname = document.getElementById('fname').value;var lname = document.getElementById('lname').value;var full = fname + ' ' + lname;document.getElementById('fullname').value = full;document.getElementById('submit-btn').style.display = 'block';return full;}</script></head><body><form><label for="fname">First name:</label><input type="text" name="fname" id="fname"></input><br /><label for="lname">Last name:</label><input type="text" name="lname" id="lname"></input><br /><label for="fullname">Full name:</label><input disabled type="text" name="fullname" id="fullname"></input><br /><input style="display: none;" type="submit" id="submit-btn"></input></form></body></html> ''')# 創(chuàng)建一個(gè)按鈕去調(diào)用 JavaScript代碼 button = QPushButton('設(shè)置全名')def js_callback(result):print(result)def complete_name():view.page().runJavaScript('completeAndReturnName();', js_callback)# 按鈕連接 'complete_name'槽,當(dāng)點(diǎn)擊按鈕是會(huì)觸發(fā)信號(hào) button.clicked.connect(complete_name)# 把QWebView和button加載到layout布局中 layout.addWidget(view) layout.addWidget(button)# 顯示窗口和運(yùn)行app win.show() sys.exit(app.exec_())
電氣工程的計(jì)算機(jī)萌新,寫博文不容易。如果你覺得本文對(duì)你有用,請(qǐng)點(diǎn)個(gè)贊支持下,謝謝。
總結(jié)
以上是生活随笔為你收集整理的pyqt5讲解9:时间模块timer和网页交互的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 马桶专用胶+耐高温多少度?
- 下一篇: pyqt5讲解10:布局管理讲解大全