gpt4 book ai didi

Python使用Pyqt5实现简易浏览器(最新版本测试过)

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python使用Pyqt5实现简易浏览器(最新版本测试过)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

准备环境 。

首先我们需要的是我们的开发环境,我使用的是python 3.8.2和pyqt 5.14.2,因为有强迫症,所以喜欢使用最新版的 。

安装QtWebEngineWidgets 。

这是新版使用的web浏览器引擎,更加的贴近谷歌浏览器,好像是需要单独安装,我就是这样的 。

?
1
pip3 install QtWebEngineWidgets

多tab页面 。

做这个的时候遇到好多坑,比如在多个tab里面打开页面,要使用这个QTabWidget,这个不用我们再去下载了,已经集成了 。

页面链接点击无反应 。

这个搞了我半天,我之前还一直以为是跨域的问题,其实是这个机制的问题,需要重写createWindow方法 。

?
1
2
3
4
5
6
7
8
9
10
11
12
# 创建浏览器,重写重写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

然后大体就是一些页面的布局,这个可以使用Qt Designer,可以自动转化成为我们的py代码 。

然后就是一些前进,后退,刷新,停止的方法 。

整体代码,可运行 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# -*- 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_())

结果 。

可以去点击地址去尝试 。

Python使用Pyqt5实现简易浏览器(最新版本测试过)

代码下载 。

图标什么的可以在阿里巴巴矢量图标库里面去找到 。

贴一下github地址 。

https://github.com/Tangleia/Python-tools-borwser 。

到此这篇关于Python使用Pyqt5实现简易浏览器(最新版本测试过)的文章就介绍到这了,更多相关Python 简易浏览器内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://segmentfault.com/a/1190000022478644 。

最后此篇关于Python使用Pyqt5实现简易浏览器(最新版本测试过)的文章就讲到这里了,如果你想了解更多关于Python使用Pyqt5实现简易浏览器(最新版本测试过)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com