让我们开发一个浏览器(一)
转载声明:
本文为摘录自“csdn博客”,版权归原作者所有。
温馨提示:
为了更好的体验,请点击原文链接进行浏览
摘录时间:
2020-05-30 14:03:22
设计界面
打开Qt设计师,新建一个Main Window,移除菜单栏和状态栏,如下图:
拖入一个Table Widget,MainWindow布局设置为网格布局,为了美观,边距都设置为0,如下图:
写代码
使用pyuic5命令将ui文件装成py文件,生成完成会多处一个main_ui.py文件
pyuic5 -o main_ui.py main_ui.ui
新建MyBrowser类,继承QMainWindow和Ui_MainWindow,QMainWindow来自PyQt5.QtWidgets,Ui_MainWindow来自编译出来的main_ui.py
class MyBrowser(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MyBrowser, self).__init__()
self.setupUi(self)
# 清除原有的两个标签
self.tabWidget.clear()
self.url = 'http://www.baidu.com'
# 初始化
self.new_tab(QUrl(self.url))
def new_tab(self, url):
# 为标签创建新网页
browser = QWebEngineView()
browser.setUrl(url)
# 添加标签,返回索引
_index = self.tabWidget.addTab(browser, url.url())
# 加载完成之后将标签标题修改为网页相关的标题
browser.loadFinished.connect(lambda: self.set_tab_title(_index, browser))
def set_tab_title(self, index, browser):
self.tabWidget.setTabText(index, browser.page().title())
接下来是程序入口
if __name__ == '__main__':
import sys
from PyQt5.QtWidgets import QApplication
app = QApplication(sys.argv)
my_browser = MyBrowser()
my_browser.show()
app.exec_()
这样一个简单的浏览器就完成了,本文到此结束。
就这样结束了吗?不,还没有。
优化体验
当点击链接时候浏览器没有跳转到新的界面,不知道是不是BUG,经查资料解决方法也是有的,继承QWebEngineView,重构createWindow函数,返回self。将browser = QWebEngineView()替换为browser = NewQWebEngineView()
class NewQWebEngineView(QWebEngineView):
def __init__(self):
super(NewQWebEngineView, self).__init__()
def createWindow(self, QWebEnginePage_WebWindowType):
return self
class MyBrowser(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MyBrowser, self).__init__()
self.setupUi(self)
# 清除原有的两个标签
self.tabWidget.clear()
self.url = 'http://www.baidu.com'
# 初始化
self.new_tab(QUrl(self.url))
def new_tab(self, url):
# 为标签创建新网页
browser = NewQWebEngineView()
browser.setUrl(url)
# 添加标签,返回索引
_index = self.tabWidget.addTab(browser, url.url())
# 加载完成之后将标签标题修改为网页相关的标题
browser.loadFinished.connect(lambda: self.set_tab_title(_index, browser))
def set_tab_title(self, index, browser):
self.tabWidget.setTabText(index, browser.page().title())
结果