最近學習PyQt5寫瀏覽器,實體代碼中“重繪”按鈕只對第一個標簽頁起作用,不能重繪第二個、第三個標簽頁了。
代碼中self.webview.reload確實只指向第一個標簽的,
新的標簽用self.tabWidget.currentWidget()可以找到新標簽頁,但self.tabWidget.currentWidget.reload()會出錯,
# -*- coding: utf-8 -*-
# @Author: dshj
# @Date : 2020/04/26
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWebEngineWidgets import QWebEngineView
# 創建主視窗
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 設定視窗標題
self.setWindowTitle('簡易瀏覽器')
# 設定視窗大小900*600
self.resize(1300, 700)
self.show()
# 創建tabwidget(多標簽頁面)
self.tabWidget = QTabWidget()
self.tabWidget.setTabShape(QTabWidget.Triangular)
self.tabWidget.setDocumentMode(True)
self.tabWidget.setMovable(True)
self.tabWidget.setTabsClosable(True)
self.tabWidget.tabCloseRequested.connect(self.close_Tab)
self.setCentralWidget(self.tabWidget)
# 第一個tab頁面
self.webview = WebEngineView(self) # self必須要有,是將主視窗作為引數,傳給瀏覽器
self.webview.load(QUrl("http://www.baidu.com"))
self.create_tab(self.webview)
# 使用QToolBar創建導航欄,并使用QAction創建按鈕
# 添加導航欄
navigation_bar = QToolBar('Navigation')
# 設定圖示的大小
navigation_bar.setIconSize(QSize(16, 16))
# 添加導航欄到視窗中
self.addToolBar(navigation_bar)
# QAction類提供了抽象的用戶界面action,這些action可以被放置在視窗部件中
# 添加前進、后退、停止加載和重繪的按鈕
back_button = QAction(QIcon('icons/houtui.png'), 'Back', self)
next_button = QAction(QIcon('icons/qianjin.png'), 'Forward', self)
stop_button = QAction(QIcon('icons/close.png'), 'stop', self)
reload_button = QAction(QIcon('icons/shuaxin.png'), 'reload', self)
# 系結事件
back_button.triggered.connect(self.webview.back)
next_button.triggered.connect(self.webview.forward)
stop_button.triggered.connect(self.webview.stop)
reload_button.triggered.connect(self.webview.reload)
# 將按鈕添加到導航欄上
navigation_bar.addAction(back_button)
navigation_bar.addAction(next_button)
navigation_bar.addAction(stop_button)
navigation_bar.addAction(reload_button)
# 添加URL地址欄
self.urlbar = QLineEdit()
# 讓地址欄能回應回車按鍵信號
self.urlbar.returnPressed.connect(self.navigate_to_url)
navigation_bar.addSeparator()
navigation_bar.addWidget(self.urlbar)
# 讓瀏覽器相應url地址的變化
self.webview.urlChanged.connect(self.renew_urlbar)
# 顯示地址
def navigate_to_url(self):
q = QUrl(self.urlbar.text())
if q.scheme() == '':
q.setScheme('http')
self.webview.setUrl(q)
# 回應輸入的地址
def renew_urlbar(self, q):
# 將當前網頁的鏈接更新到地址欄
self.urlbar.setText(q.toString())
self.urlbar.setCursorPosition(0)
# 創建tab頁面
def create_tab(self, webview):
self.tab = QWidget()
self.tabWidget.addTab(self.tab, "新建頁面")
self.tabWidget.setCurrentWidget(self.tab)
# 渲染到頁面
self.Layout = QHBoxLayout(self.tab)
self.Layout.setContentsMargins(0, 0, 0, 0)
self.Layout.addWidget(webview)
# 關閉tab頁面
def close_Tab(self, index):
if self.tabWidget.count() > 1:
self.tabWidget.removeTab(index)
else:
self.close() # 當只有1個tab時,關閉主視窗
# 創建瀏覽器,重寫重寫createwindow方法實作頁面連接的點擊跳轉
class WebEngineView(QWebEngineView):
def __init__(self, mainwindow, parent=None):
super(WebEngineView, self).__init__(parent)
self.mainwindow = mainwindow
# 重寫createwindow()
def createWindow(self, QWebEnginePage_WebWindowType):
new_webview = WebEngineView(self.mainwindow)
self.mainwindow.create_tab(new_webview)
return new_webview
# 程式入口
if __name__ == "__main__":
app = QApplication(sys.argv)
# 創建主視窗
browser = MainWindow()
browser.show()
# 運行應用,并監聽事件
sys.exit(app.exec_())
希望大神能指教
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/242544.html
上一篇:求大佬解答
下一篇:replace替換不成功
