讓我們開發乙個瀏覽器(二)

2021-08-28 23:45:21 字數 3744 閱讀 4178

讓我們開發乙個瀏覽器(一)實現了在乙個標籤中跳轉的建議瀏覽器,接下來新增一些功能,如位址列、多標籤、前進、後退、重新整理...

實現效果如下:

原始碼如下:

from pyqt5.qtcore import qurl, pyqtsignal, qt

from pyqt5.qtgui import qmovie, qicon

from pyqt5.qtwidgets import qmainwindow

from pyqt5.qtwebenginewidgets import qwebengineview

from ui.main_ui import ui_mainwindow

class newqwebengineview(qwebengineview):

new_signal = pyqtsignal(object)

def __init__(self):

super(newqwebengineview, self).__init__()

def createwindow(self, qwebenginepage_webwindowtype=none):

browser = newqwebengineview()

browser.resize(self.size())

#傳送新建的browser

self.new_signal.emit(browser)

return browser

class mybrowser(qmainwindow, ui_mainwindow):

def __init__(self):

super(mybrowser, self).__init__()

self.setupui(self)

self.is_first = true

self.pre_index = 0

self.browsers = {}

self.url = ''

# 初始化

self._init()

def _init(self):

# 清除原有的兩個標籤

self.tabwidget.clear()

self.tabwidget.tabcloserequested.connect(self.tab_close)

# 例項化newqwebengineview

browser = newqwebengineview()

browser.new_signal.connect(self.new_tab)

browser.createwindow()

#視窗最大化

self.setwindowstate(qt.windowmaximized)

#設定動態圖示

self.pm = qmovie(':/icon/images/title.gif')

self.pm.start()

self.pm.framechanged.connect(lambda: self.setwindowicon(qicon(self.pm.currentpixmap())))

# 槽函式

self.tabwidget.currentchanged.connect(self.tabwidget_currentchanged)

self.lineedit_url.returnpressed.connect(self.lineedit_url_returnpressed)

def lineedit_url_returnpressed(self):

browser = newqwebengineview()

browser.seturl(qurl(self.lineedit_url.text()))

self.new_tab(browser)

def tabwidget_currentchanged(self, _index):

try:

self.pushbutton_back.clicked.disconnect(self.browsers[self.pre_index].back)

self.pushbutton_forward.clicked.disconnect(self.browsers[self.pre_index].forward)

self.pushbutton_refresh.clicked.disconnect(self.browsers[self.pre_index].reload)

except:

pass

self.pushbutton_back.clicked.connect(self.browsers[_index].back)

self.pushbutton_forward.clicked.connect(self.browsers[_index].forward)

self.pushbutton_refresh.clicked.connect(self.browsers[_index].reload)

self.lineedit_url.settext(self.browsers[_index].url().url())

def update_url(self, index, browser, is_finish=true):

if is_finish:

self.tabwidget.settabtext(index, browser.page().title()[0:20])

self.lineedit_url.settext(browser.url().url())

else:

self.tabwidget.settabtext(index, browser.url().url()[0:20])

def tab_close(self, i):

self.tabwidget.removetab(i)

if self.tabwidget.count() == 0:

self.close()

def new_tab(self, browser):

if self.is_first:

browser.seturl(qurl(self.url))

self.is_first = false

browser.new_signal.connect(self.new_tab)

# 新增標籤,返回索引

_index = self.tabwidget.addtab(browser, '載入中...')

self.browsers[_index] = browser

self.tabwidget.setcurrentindex(_index)

self.pre_index = _index

# url變化後改變tab標題

browser.urlchanged.connect(lambda: self.update_url(_index, browser, is_finish=false))

# 載入完成之後將標籤標題修改為網頁相關的標題

browser.loadfinished.connect(lambda: self.update_url(_index, browser, is_finish=true))

if __name__ == '__main__':

import sys

my_browser = mybrowser()

my_browser.show()

使用Chrome瀏覽器,讓我們遠離(所有)廣告

你是否還在為瀏覽網頁時各種廣告霸屏而急躁不安?這裡分享乙個小技巧,如何自動遮蔽各大廣告。具體操作流程 首先開啟chrome瀏覽器,點選應用商店 點選進入應用商店 需要fq才能訪問,這個就小夥伴們自己想辦法了。安裝完成 檢視效果 訪問一下指令碼之家 完全沒有廣告,這種體驗。若是有的廣告沒有自動遮蔽,如...

推薦乙個瀏覽器 搜狗

上邊顯示自己的登陸的賬戶,有各種工具,在最下邊一行中的各種工具很強大,可以新增各種工具,搜狗瀏覽器本身提供了各種常用的瀏覽器,使用起來十分方便,我用的較多的有訊息盒子 在訊息盒子中可以繫結自己的各種賬號,各種通知都可以進行瀏覽 收藏夾也十分有用,個人比較喜歡 還有上邊的京東 了解購物資訊很方便的 本...

當你在瀏覽器中輸入乙個位址(一) 瀏覽器檢查位址

瀏覽器是我們日常都會用的乙個軟體,那麼,當你向瀏覽器的位址列輸入乙個位址 url 時,它背後究竟發生了哪些故事呢?對於瀏覽器來說,一般可以支援兩種位址的輸入 ip 192.直接訪問和通過網域名稱 www.com 訪問。在你輸入乙個位址後,瀏覽器最先做的就是檢查你的位址是否 合法 譬如,用ip的時候有...