pyqt5讲解9:时间模块timer和网页交互
time
如果要在應用程序中周期性地進行某項操作,則需要用到QTimer定時器,QTimer類提供了重復的和單次的定時器。要使用定時器,需要先創建一個QTimer實例,將其timeout信號連接到相應的槽,并調用start()。然后定時器會以恒定的間隔發出timeout信號,當窗口控件收到timeout信號后,它就會停止這個定時器。
常用方法
| start(milliseconds) | 啟動或重新啟動定時器,時間間隔為毫秒。如果定時器已經運行,它將被停止并重新啟動。如果singleShot信號為真,定時器將僅被激活一次 |
| Stop() | 停止定時器 |
常用信號
| singleShot | 在給定的時間間隔后調用一個槽函數時發射此信號 |
| timeout | 當定時器超時時發射此信號 |
算例1
# -*- coding: utf-8 -*- '''【簡介】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('顯示當前時間')self.startBtn = QPushButton('開始') self.endBtn = QPushButton('結束') layout = QGridLayout(self) # 初始化一個定時器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): # 獲取系統現在的時間time = QDateTime.currentDateTime() # 設置系統時間顯示格式timeDisplay = time.toString("yyyy-MM-dd hh:mm:ss dddd");# 在標簽上顯示時間self.label.setText( timeDisplay ) def startTimer(self): # 設置計時間隔并啟動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_())會一直不斷的更新時間
首先初始化一個定時器,把定時器的timeout信號與showTime()槽函數連接起來
self.timer=QTimer(self)
self.timer.timeout.connect(self.showTime)
使用連接的槽函數顯示當前時間,并在標簽上顯示系統當前的時間
def showTime(self):
#獲取系統當前時間
time=QDateTime.currentDateTime()
#設置系統時間的顯示格式
timeDisplay=time.toString(‘yyyy-MM-dd hh:mm:ss dddd’)
#在標簽上顯示時間
self.lable.setText(timeDisplay)
單擊開始按鈕,啟動定時器,并使按鈕失效
#設置時間間隔并啟動定時器
self.timer.start(1000)
#設置開始按鈕不可點擊,結束按鈕可點擊
self.startBtn.setEnabled(False)
self.endBtn.setEnabled(True)
單擊結束按鈕,停止定時器,并使按鈕失效
#停止定時器
self.timer.stop()
#結束按鈕不可點擊,開始按鈕可以點擊
self.startBtn.setEnabled(True)
self.endBtn.setEnabled(False)
10秒后窗口消失
彈出的窗口會在10秒后消失,模仿程序的啟動界面,將彈出的窗口設置為無邊框
#設置無邊框窗口
label.setWindowFlags(Qt.SplashScreen|Qt.FramelessWindowHint)
使用QTimer設置時間間隔,10秒后退出程序
#設置10秒后自動退出
QTimer.singleShot(10000,app.quit)
網頁交互
PyQt5 使用 QWebEngineView 控件來展示 HTML 頁面,WebEngine 框架時基于谷歌的 Chromium 引擎開發。
QWebEngine 類常用方法如下:
| load(QUrl url) | 加載指定的 URL 并顯示 |
| setHtml(QString &html) | 將網頁視圖的內容設置為指定的 HTML 內容 |
注意事項
說明下 如果算例出現錯誤
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 -*-'''【簡介】QWebEngineView 打開本地網頁例子'''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/學習草稿/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 -*- '''【簡介】QWebView打開網頁例子 '''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打開網頁例子')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 -*- '''【簡介】QWebView中網頁調用JavaScript '''from PyQt5.QtWidgets import QApplication , QWidget , QVBoxLayout , QPushButton from PyQt5.QtWebEngineWidgets import QWebEngineView import sys# 創建一個 application實例 app = QApplication(sys.argv) win = QWidget() win.setWindowTitle('Web頁面中的JavaScript與 QWebEngineView交互例子')# 創建一個垂直布局器 layout = QVBoxLayout() win.setLayout(layout)# 創建一個 QWebEngineView 對象 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> ''')# 創建一個按鈕去調用 JavaScript代碼 button = QPushButton('設置全名')def js_callback(result):print(result)def complete_name():view.page().runJavaScript('completeAndReturnName();', js_callback)# 按鈕連接 'complete_name'槽,當點擊按鈕是會觸發信號 button.clicked.connect(complete_name)# 把QWebView和button加載到layout布局中 layout.addWidget(view) layout.addWidget(button)# 顯示窗口和運行app win.show() sys.exit(app.exec_())
電氣工程的計算機萌新,寫博文不容易。如果你覺得本文對你有用,請點個贊支持下,謝謝。
總結
以上是生活随笔為你收集整理的pyqt5讲解9:时间模块timer和网页交互的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 马桶专用胶+耐高温多少度?
- 下一篇: 双色球5+2是多少钱一注?