hikvision v2.3控件网页demo_《快速掌握PyQt5》第三十章 网页交互QWebEngineView
如果需要在程序中加載并顯示網頁,那QWebEngineView絕對是最佳的選擇。該控件基于Chrome瀏覽器內核引擎,所提供的功能和方法還是比較強大的。
注:V5.11及更高版本的PyQt5中不包含QWebEngineView,請另外單獨下載:
pip30.1 制作簡單瀏覽器
本章我們就通過制作下圖所示的簡單瀏覽器來了解QWebEngineView的用法:
在輸入框中輸入網址并敲回車后,QWebEngineView控件加載并顯示相應的網址內容。左上方的三個按鈕可以允許我們進行前進、后退和刷新操作,右上方的兩個按鈕可以放大和縮小網頁。
下面我們一步步來實現,首先完成瀏覽器的外觀:
import1. 通過resize()方法來將窗口大小設為1000x600;
2. 實例化按鈕控件、輸入框控件以及QWebEngineView控件;
3. 完成布局,使用setSpacing()傳入參數0代表讓各個控件之間不存在間隔(主要想讓按鈕靠攏),隨后我們在想要的地方使用addStretch(),這樣就達到讓輸入框和按鈕分離開來,而按鈕之間又是相互靠攏的目的。
4. 給按鈕添加圖標,圖片下載地址如下:
- back.png: https://www.easyicon.net/download/png/1117578/64/
- forward.png: https://www.easyicon.net/download/png/1117605/64/
- refresh.png: https://www.easyicon.net/download/png/1117668/64/
- zoom_in.png: https://www.easyicon.net/download/png/1117715/64/
- zoom_out.png: https://www.easyicon.net/download/png/1117716/64/
5. 設置輸入框寬度為400并設置占位符提示用戶在這里輸入網址。
此時運行截圖如下,QWebEngine還沒有顯示任何網頁:
接下來完成以下功能:在輸入框中輸入網址并敲擊回車后,QWebEngineView加載并顯示相應的網址內容:
def既然涉及到鍵盤,那肯定要用事件函數來處理了。
標準的鍵盤上是有兩個回車鍵的,Key_Return為大回車,Key_Enter為小回車(這里我們把兩種都考慮進來)如下圖所示:
加上if self.url_le.hasFocus():判斷是為了只有在輸入框被編輯的狀態下敲擊回車才會讓網頁實現跳轉(讀者也可以去使用下市面上的瀏覽器看下是否是這樣)。
條件都滿足的話,就調用load()方法并傳入一個QUrl類型參數即可(不能單單傳入字符串,需要用QUrl()把字符串轉為QUrl對象)。
雖然QWebEngineView已經提供了很多有用的方法,但是許多方面還是需要我們開發人員進行完善。比如用戶如果只輸入"http://baidu.com"的話,那QWebEngineView其實是識別不出來的,也就無法加載和顯示網頁了(會跳轉到空白頁)。
市面上的瀏覽器在用戶只輸入"http://baidu.com"的情況下,會自動在最前面加上"http://"或者“https://”,我們接下來完善下代碼:
def調用startswith()方法判斷用戶輸入的網址字符串是否是以"https://"或者“http://”開頭的,如果是的話,則采用用戶輸入的網址;如果不是,則在前面加上"https://"。這樣的話QWebEngineView就可以正常顯示了。
接下來完成以下功能:首次運行程序時,QWebEngineView顯示百度網頁。
def非常簡單,只需要在類初始化函數中調用以上函數即可。
到目前為止,程序代碼如下:
import我們運行一下,發現兩個問題:
1. 程序首次運行時,輸入框文本并沒有顯示百度網址。
2. 當我們在輸入框中輸入"http://python.org"并敲擊回車后,網頁可以加載,但是輸入框并沒有顯示當前應該要顯示的“https://www.python.org/”。
或者在點擊頁面中的“Downloads”跳轉到另一個頁面后,輸入框的文本也應該要相應地變為“https://www.python.org/downloads/”。
根據以上問題我們知道接下來應該把輸入框的文本設置為QWebEngineView所加載的網址。QWebEngineView控件有一個信號urlChanged,該信號會在每次要加載的網址發生變化時發射。那我們其實可以把這個信號和槽函數連接起來,在槽函數中我們把輸入框的文本設置為變化后QWebEngineView要加載的網址即可(其他信號例如loadStarted, loadFinished等其實也可以)。
我們只需要在browser_init()函數中加一行信號和槽函數連接的代碼即可:
def調用QWebEngineView的url()方法獲取QUrl對象,但這個不是字符串類型,所以還需要調用toDisplayString()方法來獲取url文本字符串。現在再來運行下就會發現輸入框的文本會跟隨QWebEngineView當前加載的網址改變而改變了。
接下來我們完善按鈕功能,首先是左上角的后退、前進和刷新。查看文檔我們很容易就會發現QWebEngineView有幾個槽函數可以實現這三個功能:
back()方法實現后退功能,forward()方法實現前進功能而reload()方法實現刷新功能。我們接下來只需要在btn_init()函數中加幾行信號和槽函數連接的代碼即可:
def此時運行下程序,就會發現程序可以像一個真正的瀏覽器一樣后退、前進和刷新了。
最后是放大縮小功能,要實現這種功能我們需要用到zoomFactor()方法和setZoomFactor()方法。前者獲取當前縮放值,后者設置縮放值。那也就是說我們每當用戶點擊放大或縮小按鈕時,只需要先獲取到當前的縮放值,然后放大的話就增加縮放值,縮小就減小縮放值。首先實現槽函數,代碼如下:
def然后在btn_init()函數中再加兩行信號和槽函數連接的代碼:
def現在運行下程序,點擊放大縮小按鈕,頁面就會相應的放大縮小:
??但是放大和縮小的范圍是有限定的:
根據文檔我們可以知道范圍為0.25-5.0,默認值是1.0。
完整代碼如下:
import30.2 小結
1. 這個簡單的瀏覽器還可以添加很多功能,或者再進行完善,讓它更像一個真正的瀏覽器。比如程序首次運行時,前進和后退按鈕應該都要設置為不可用,而且在無法前進和后退是也要設置為不可用(涉及到history()方法,小伙伴可以自己去實現下)。
2. 還是那句話——多查文檔。如果你腦海里有想要實現的功能,你可以去查下文檔看看這個控件有沒有提供相應的方法。或者你腦海里可能一片空白,那你其實也可以先去讀下文檔看看某控件提供方法有沒有你喜歡的,能給你帶來靈感也說不定。
總結
以上是生活随笔為你收集整理的hikvision v2.3控件网页demo_《快速掌握PyQt5》第三十章 网页交互QWebEngineView的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue如何获取年月日_vue 学习笔记第
- 下一篇: circle函数用法 turtle_Tu