用python编写一个搜索引擎
2024-09-03 18:46:24
完整代码如下:
#!/usr/bin/env python
#-*- coding: utf-8 -*- import sys
import os
import datetime
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtWebEngineWidgets import QWebEngineView,QWebEngineSettings
################################################
#######创建主窗口
################################################
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle('My Browser')
self.showMaximized()
self.setWindowFlags(Qt.FramelessWindowHint) #####创建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) #创建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时,关闭主窗口 ################################################
#######创建浏览器
################################################
class WebEngineView(QWebEngineView): def __init__(self,mainwindow,parent=None):
super(WebEngineView, self).__init__(parent)
self.mainwindow = mainwindow
##############
self.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True) #支持视频播放
self.page().windowCloseRequested.connect(self.on_windowCloseRequested) #页面关闭请求
self.page().profile().downloadRequested.connect(self.on_downloadRequested) #页面下载请求 # 支持页面关闭请求
def on_windowCloseRequested(self):
the_index = self.mainwindow.tabWidget.currentIndex()
self.mainwindow.tabWidget.removeTab(the_index) # 支持页面下载按钮
def on_downloadRequested(self,downloadItem):
if downloadItem.isFinished()==False and downloadItem.state()==0:
###生成文件存储地址
the_filename = downloadItem.url().fileName()
if len(the_filename) == 0 or "." not in the_filename:
cur_time = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
the_filename = "下载文件" + cur_time + ".xls"
the_sourceFile = os.path.join(os.getcwd(), the_filename) ###下载文件
# downloadItem.setSavePageFormat(QWebEngineDownloadItem.CompleteHtmlSaveFormat)
downloadItem.setPath(the_sourceFile)
downloadItem.accept()
downloadItem.finished.connect(self.on_downloadfinished) # 下载结束触发函数
def on_downloadfinished(self):
js_string = '''
alert("下载成功,请到软件同目录下,查找下载文件!");
'''
self.page().runJavaScript(js_string) # 重写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)
QCoreApplication.setAttribute(Qt.AA_UseSoftwareOpenGL) #这句解决错误警告:ERROR:gl_context_wgl.cc(78)] Could not share GL contexts.
the_mainwindow = MainWindow()
the_mainwindow.show()
sys.exit(app.exec_())
最新文章
- AngularJs:Service、Factory、Provider依赖注入使用与区别
- DTD约束的校验工具安装及检验(Iexmltls工具)
- Servlet中读取参数的几种方式
- Using the viewport meta tag to control layout on mobile browsers
- Android添加标题进度条
- JavaScript(暂时弃坑...)
- springMVC入门配置及helloworld实例
- time元素定义的格式
- Python类方法、静态方法与实例方法
- linux 最大文件描述符
- nginx系列9:HTTP反向代理请求处理流程
- ZooKeeper-配置 zoo.cfg
- hdu 1238 Substrings(kmp+暴力枚举)
- JS膏集01
- [AGC001 E] BBQ Hard
- Git的上传步骤
- ArrayList vs LinkedList 空间占用
- [转]获取app的内部储存路径
- DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了
- 为什么JS事件函数里面都有一个参数(ev)?
热门文章
- 洛谷 P1873 【砍树】
- Android Studio中每次打开工程Gradle sync龟速解决办法
- 【13NOIP提高组】转圈游戏(信息学奥赛一本通 1875)(洛谷 1965)
- 《jmeter接口自动化与性能实战-飞天小子.pdf》
- WPF——OXY绘图_old
- centos7安装hadoop2.7.7
- [技术博客] 【vagrant】硬盘扩容
- Git和Github详细教程
- 【转发】SqlServer数据库表生成C# Model实体类SQL语句
- 移除 WordPress 自动加载的 jQuery,使用自定义 jQuery 版本