-
-
Notifications
You must be signed in to change notification settings - Fork 2k
浏览器下载功能 #25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
浏览器下载功能 #25
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file added
partner_625781186/6.QWebEngineView下载文件/ScreenShot/1.png
150 changes: 150 additions & 0 deletions
partner_625781186/6.QWebEngineView下载文件/browser.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,150 @@ | ||
# v1.2 | ||
# created | ||
# by Roger | ||
# in 2017年1月3日 | ||
|
||
from PyQt5.QtCore import * | ||
from PyQt5.QtWidgets import * | ||
from PyQt5.QtGui import * | ||
from PyQt5.QtWebEngineWidgets import QWebEngineView | ||
import configparser | ||
|
||
|
||
import sys | ||
|
||
class MainWindow(QMainWindow): | ||
|
||
def __init__(self, *args, **kwargs): | ||
super().__init__(*args, **kwargs) | ||
# 设置窗口标题 | ||
self.setWindowTitle('My Browser') | ||
# 设置窗口图标 | ||
self.setWindowIcon(QIcon('icons/penguin.png')) | ||
|
||
# 设置窗口大小900*600 | ||
self.resize(750, 400) | ||
self.show() | ||
self.frame=1 | ||
# 设置浏览器 | ||
self.browser = MyEngineView() | ||
# config = configparser.ConfigParser() | ||
# config.readfp(open('url.ini')) | ||
# url= config.get("URL","url") | ||
url="http://www.onlinedown.net/soft/56160.htm" | ||
# 指定打开界面的 URL | ||
self.browser.setUrl(QUrl(url)) | ||
# 添加浏览器到窗口中 | ||
self.setCentralWidget(self.browser) | ||
|
||
self.tray = QSystemTrayIcon() #创建系统托盘对象 | ||
self.icon = QIcon('icons/back.png') #创建图标 | ||
self.tray.setIcon(self.icon) #设置系统托盘图标 | ||
self.tray.show() | ||
|
||
|
||
#使用QToolBar创建导航栏,并使用QAction创建按钮 | ||
# 添加导航栏 | ||
navigation_bar = QToolBar('Navigation') | ||
# 设定图标的大小 | ||
navigation_bar.setIconSize(QSize(16, 16)) | ||
#添加导航栏到窗口中 | ||
self.addToolBar(navigation_bar) | ||
|
||
#QAction类提供了抽象的用户界面action,这些action可以被放置在窗口部件中 | ||
# 添加前进、后退、停止加载和刷新的按钮 | ||
back_button = QAction(QIcon('icons/back.png'), 'Back', self) | ||
next_button = QAction(QIcon('icons/next.png'), 'Forward', self) | ||
stop_button = QAction(QIcon('icons/cross.png'), 'stop', self) | ||
reload_button = QAction(QIcon('icons/renew.png'), 'reload', self) | ||
|
||
|
||
back_button.triggered.connect(self.browser.back) | ||
next_button.triggered.connect(self.browser.forward) | ||
stop_button.triggered.connect(self.browser.stop) | ||
reload_button.triggered.connect(self.browser.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.setText(url) | ||
# 让地址栏能响应回车按键信号 | ||
self.urlbar.returnPressed.connect(self.navigate_to_url) | ||
|
||
navigation_bar.addSeparator() | ||
navigation_bar.addWidget(self.urlbar) | ||
|
||
#让浏览器相应url地址的变化 | ||
self.browser.urlChanged.connect(self.renew_urlbar) | ||
|
||
def navigate_to_url(self): | ||
q = QUrl(self.urlbar.text()) | ||
if q.scheme() == '': | ||
q.setScheme('http') | ||
self.browser.setUrl(q) | ||
|
||
def renew_urlbar(self, q): | ||
# 将当前网页的链接更新到地址栏 | ||
self.urlbar.setText(q.toString()) | ||
self.urlbar.setCursorPosition(0) | ||
|
||
class MyEngineView(QWebEngineView): | ||
''' | ||
浏览器类。 | ||
''' | ||
def __init__(self, parent=None, ): | ||
super(MyEngineView, self).__init__(parent) | ||
self.parent = parent | ||
#有下载信号发起 | ||
self.page().profile().downloadRequested.connect(self.on_downloadRequested) | ||
|
||
def createWindow(self, type): | ||
''' | ||
实现点击跳转链接。 | ||
''' | ||
return self | ||
|
||
#以下函数里的 :后为注释,无实际作用 | ||
|
||
#下载信号连接到的槽 | ||
def on_downloadRequested(self, download : "QWebEngineDownloadItem" ): | ||
# download是QWebEngineDownloadItem对象; | ||
download.downloadProgress.connect(self._downloadProgress) | ||
download.finished.connect(self._finished) | ||
|
||
#下载文件的保存路径及文件名 | ||
old_path = download.path() | ||
suffix = QFileInfo(old_path).suffix() | ||
#下载文件类型 | ||
filttype = download.mimeType() | ||
#后缀切割 | ||
unkonw_suffix = filttype.split(r'/')[-1] | ||
path, _ =QFileDialog.getSaveFileName(self, "Save File", old_path, "*."+unkonw_suffix + ";;" + "*."+suffix ) | ||
|
||
print(old_path, suffix) | ||
|
||
if path!="": | ||
download.setPath(path) | ||
download.accept() | ||
|
||
def _downloadProgress(self , bytesReceived:"qint64", bytesTotal:"qint64"): | ||
# bytesReceived 当前下载值 ; bytesTotal 文件总大小值 | ||
self.bytesReceived = bytesReceived | ||
self.bytesTotal = bytesTotal | ||
print(bytesReceived , bytesTotal ) | ||
|
||
def _finished(self): | ||
print("下载完成") | ||
|
||
if __name__ == "__main__": | ||
# 创建应用 | ||
app = QApplication(sys.argv) | ||
# 创建主窗口 | ||
window = MainWindow() | ||
# 显示窗口 | ||
window.show() | ||
# 运行应用,并监听事件 | ||
app.exec_() |
18 changes: 18 additions & 0 deletions
partner_625781186/6.QWebEngineView下载文件/readme.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
# QWebEngineView下载文件 | ||
|
||
## QT官方自带例子 - 额 官方上没有 ,在本地 Examples\Qt-5.9.1\webenginewidgets\demobrowser 文件夹下。 | ||
|
||
 | ||
|
||
#QWebEngineView的下载请求信号 | ||
QWebEngineView().page().profile().downloadRequested.connect(self.on_downloadRequested) | ||
|
||
#QWebEngineDownloadItem | ||
下载过程的信号 | ||
QWebEngineDownloadItem().downloadProgress.connect(self._downloadProgress) | ||
下载结束的信号 | ||
QWebEngineDownloadItem().finished.connect(self._finished) | ||
|
||
## 参考文献 | ||
https://stackoverflow.com/questions/50164712/how-to-open-download-file-dialog-with-qwebengineview-on-pyqt5 | ||
https://stackoverflow.com/questions/38812787/how-to-handle-downloads-in-qwebengine |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.