网页默认全屏和Esc批量正常显示的新一代浏览技术的制作方法

文档序号:23761982发布日期:2021-01-29 19:06阅读:122来源:国知局
网页默认全屏和Esc批量正常显示的新一代浏览技术的制作方法
网页默认全屏和esc批量正常显示的新一代浏览技术
技术领域
[0001]
新一代极速简约全屏浏览器。


背景技术:

[0002]
截止2020年11月27日,全世界所有浏览器(包括但不限于:谷歌、ie、360、火狐狸、搜狗和edge浏览器)都采用f11功能键实现网页全屏或正常页签显示的切换,在网民中很不普及,影响了全世界50亿网民的上网体验,尤其在世界销量第一或第二的联想电脑上,功能键需要同时按下fn + f11两个键,实在太麻烦了。全屏显示网页确实给用户以界面清爽的良好体验,但f11键实在不常用,好功能无法发挥出来。本发明就是在此背景下提出来的,esc键的使用频率比f11键高上千倍,采用esc键切换全屏可以在网民中迅速普及,改善全世界网民的上网体验。良好上网体验乘以50亿网民将是不可估量的经济价值。适合做网页全屏切换的至少还有两个键:alt键和空格键,这两个键离用户的左手大拇指最近。


技术实现要素:

[0003]
本发明内容:在浏览器启动打开首页导航(如:hao123.com)或任何超链接网址时,默认均以全屏显示(图1和图2),按esc键或alt键或空格键,所有全屏幕显示的网页就批量转为正常页签方式显示(图3 和图4),给用户以界面清爽的良好体验,可以随意切换;“全屏模式”下,按esc键等全屏切换键以外的任何ascii键,都会自动触发“全屏模式”失效,满足正常的键盘输入;本软件调用的其他独立软件的使用都会自动触发“全屏模式”失效,点击任何超链接可再次激活“全屏模式”。本技术也适合普通电脑应用窗口的全屏或正常显示的自由切换。python语言是目前最流行的计算机开发语言,它有最庞大的第三方生态圈,火狐狸浏览器原来基于c++语言开发,两年前就逐步转向python语言开发了。本发明就以python语言提供编程代码,启用的第三方软件开发包是qt和pyqt,代码在申请人公司自产标准全屏浏览器中调试通过。python语言的编程原理同样适用于c++和java语言或其他高级计算机语言。
附图说明
[0004]
图1、浏览器导航页全屏显示图2、普通网页全屏显示图3、浏览器导航页正常显示图4、普通网页正常显示。
具体实施方式
[0005]
采用python 3.7、pyqt5 和 pyqtwebeingine 第三方开发包实现新一代极速简约全屏浏览器,网页默认全屏显示是浏览器的主要功能之一,开发平台是 pycharm community 2019.3 版本。以#开头的是注释行,/ 是折行符,以下是代码:
1、主要程序框架代码,隐藏具体类的代码import sys,json,os,datetime,warnings,base64from subprocess import popen# 导入系统功能包from pyqt5.qtcore import qurl, qt, qcoreapplication, pyqtsignal, qdir, qfileinfo, // qstandardpaths,qstringlistmodel,qpoint,qmarginsffrom pyqt5.qtwidgets import qapplication, qmainwindow, qlineedit, qtoolbar, qtabwidget, // qwidget, qhboxlayout,qdialog, qpushbutton, qprogressbar, qmenu, qlabel,qmessagebox,//qaction,qlistview,qtoolbutton,qcheckbox,qradiobutton,qdockwidget,qtreeview,//qfiledialogfrom pyqt5.qtgui import qicon,qdesktopservices,qcursor,qkeysequence,qfont, // qstandarditemmodel,qstandarditem,qpagelayout,qpagesizefrom pyqt5.qtwebenginewidgets import qwebengineview, qwebenginesettings, // qwebenginedownloaditem, qwebenginepagefrom pynput.keyboard import controller,keyimport paramikoimport uuid,re# 导入第三方开发包download_item_ls = []# 储存下载任务数组变量webview_group = []# 储存网页实例数组变量webview_group_pdf_finished = []# 储存网页实例预览网页的pdf文件完成的数组变量webview_parent_group = []# 储存网页父实例数组变量webview_fullscreen_index = []# 储存网页实例全屏索引号数组变量class myqmenu(qmenu):# 重写qmenu菜单类class webview(qwebengineview):# 重写网页qwebengineview类class myqlineedit(qlineedit):
# 重写qlineedit类class downloadwidget(qprogressbar):# 自定义下载downloadwidget类,继承qprogressbar类class myqmainwindow(qmainwindow):# 重写qmainwindow类class findtoolbar(qtoolbar):# 自定义页面查找findtoolbar类,继承qtoolbar类class bookmarkwidget(qtreeview):# 自定义书签类,继承qtreeview类class browser(myqmainwindow):# 自定义browser类,调用网页webview类,继承myqmainwindow类class mybrowser(myqmainwindow):# 自定义mybrowser类,调用browser类,继承myqmainwindow类if __name__ == "__main__":# 主程序argvs = sys.argvargvs.append("
--
no-sandbox")qcoreapplication.setattribute(qt.aa_usesoftwareopengl)app = qapplication(argvs)window = mybrowser()# 实例化主窗口和加载首页面window.show()# 显示主窗口sys.exit(app.exec_())2、与全屏显示切换有关的具体代码class webview(qwebengineview):# 自定义webview类,继承qwebengineview类,这是pyqt的网页显示模块@staticmethoddef minimum_zoom_factor():return 0.25@staticmethoddef maximum_zoom_factor():return 5def __init__(self, mainwin):super().__init__(mainwin)self.mainwin = mainwindef createwindow(self, qwebenginepage_webwindowtype):# 创建网页窗口的方法new_webview = webview(self.mainwin)
self.mainwin.create_tab(new_webview)# 调用browser实例的创建第二个及以上页签的方法return new_webview# 返回打开的页面实例class mybrowser(myqmainwindow):
……ꢀ
# 创建主窗口和第一个导航页签的方法def newtab(self):# 创建第一个导航页签的方法self.tab = qwidget()self.tabwidget.addtab(self.tab, "新")self.tabwidget.setcurrentwidget(self.tab)self.layout = qhboxlayout(self.tab)self.layout.addwidget(browser(self))# 在第一个新页签加载browser()实例class browser(myqmainwindow):def create_tab(self, webview):# 创建第二个及以上页签的方法self.tab = qwidget()self.mainwin.tabwidget.addtab(self.tab, '')self.mainwin.tabwidget.setcurrentwidget(self.tab)self.layout = qhboxlayout(self.tab)web_view=browser(self.mainwin, webview=webview)# 递归调用本类,实例化超链接网页,附加地址栏self.layout.addwidget(web_view)# 把网页和附加地址栏加载到新页签webview.setparent(none)# 把新网页置顶webview.showfullscreen()# 使新网页默认全屏显示webview_fullscreen_index.append(self.mainwin.index)# 把新网页的索引号保存到数组变量webview_fullscreen_indexweb_view.grabkeyboard()# 把网页和附加地址栏设置为捕获键盘,进入全屏模式def initui(self):if self.webview == none:self.webview = webview(self)self.webview.load(qurl("http://www.hao123.com/"))elif self.webview == '':self.webview = webview(self)
self.webview.setzoomfactor(1.35)webview_group.append(self.webview)# 把网页实例添加到数组变量webview_groupwebview_group_pdf_finished.append(0)self.webview.page().titlechanged.connect(self._title_changed)self.webview.page().iconchanged.connect(self._icon_changed)self.inittoolbar(self.webview)self.setcentralwidget(self.webview)webview_parent_group.append(self.webview.parent())# 把网页的父实例添加到数组变量webview_parent_group if self.mainwin.index==0:# 如是第一个导航页签,则执行以下代码self.webview.setparent(none)# 把导航页置顶self.webview.showfullscreen()# 把导航页设置为默认全屏显示webview_fullscreen_index.append(0)# 把导航页的索引号0添加到数组变量webview_fullscreen_indexwebview_parent_group[0].grabkeyboard()# 让导航页父实例进入“全屏模式”def keypressevent(self, qkeyevent):#
ꢀ“
全屏模式”处理键盘输入的方法key = qkeyevent.key()# 获取键盘输入值if self.urlbar.hasfocus():self.release_keyboard()# 如地址栏已经有焦点,则使“全屏模式”失效,地址栏接管正常键盘输入elif key == qt.key_escape or key == qt.key_space or qkeyevent.modifiers() == // qt.altmodifier:# 如输入esc件或空格键或alt键,则处理“全屏模式”如下if not webview_group[self.mainwin.index].isfullscreen():# 如当前网页不是“全屏显示”,则执行以下代码进入全屏显示状态webview_group[self.mainwin.index].setparent(none)# 把当前网页置顶webview_group[self.mainwin.index].showfullscreen()# 使当前网页全屏显示webview_fullscreen_index.append(self.mainwin.index)# 把当前网页的索引号添加到数组变量webview_fullscreen_indexprint('esc full screen...')
else:# 如当前处于全屏显示状态,则执行以下代码,批量恢复到正常显示for i in range(0,len(webview_fullscreen_index)):# 遍列网页全屏数组变量webview_fullscreen_indexwebview_group[webview_fullscreen_index[i]].shownormal()# 使网页逐个正常显示webview_parent_group[webview_fullscreen_index[i]].setcentralwidget( // webview_group[webview_fullscreen_index[i]])# 把正常显示的网页逐个放置到对应的父实例print('esc normal screen...')webview_fullscreen_index.clear()# 把全屏索引号数组变量webview_fullscreen_index清空else:self.release_keyboard()# 调用网页“全屏模式”失效的方法keyboard = controller()# 模拟键盘实例化if key == qt.key_backspace:# 处理倒格键,qt不允许模拟输入倒格键,可能出于安全考虑,需两步模拟keyboard.press(key.left)# 模拟按下左光标键,让接管的控件捕获keyboard.release(key.left)# 模拟松开左光标键,让接管的控件捕获keyboard.press(key.delete)# 模拟按下删除键,让接管的控件捕获keyboard.release(key.delete)# 模拟松开删除键,让接管的控件捕获elif key>32 and key<=126:# 如按的键是除空格外的打印字符,则应模拟键盘输入,避免用户重复输入keyboard.press(chr(key))# 模拟按下其他键,让接管的控件捕获 keyboard.release(chr(key))# 模拟松开其他键,让接管的控件捕获def release_keyboard(self):# 使网页“全屏模式”失效的方法for i in range(0, len(webview_fullscreen_index)):# 遍列网页全屏索引号数组变量webview_fullscreen_indexwebview_group[webview_fullscreen_index[i]].shownormal()# 让每个网页正常显示
webview_parent_group[webview_fullscreen_index[i]].setcentralwidget( // webview_group[webview_fullscreen_index[i]])# 把正常显示的网页放置到对应的页签中webview_fullscreen_index.clear()# 全屏索引号数组变量清空for i in range(0, len(webview_parent_group)):webview_parent_group[i].releasekeyboard() # 逐个使网页父实例的“全屏模式”失效3、以下代码解决受“全屏模式”影响的网址栏无光标显示的问题class myqlineedit(qlineedit):# 重写qlineedit类def __init__(self, parent=none):super(myqlineedit, self).__init__(parent)self.save_text = ''def mousepressevent(self, event):# 这个方法可以恢复网址栏光标显示message = qmessagebox()message.setwindowtitle(' ')message.setstandardbuttons(qmessagebox.ok)message.button(qmessagebox.ok).animateclick(35)# 弹出一个仅带有ok键的信息框,延时35毫秒后自动关闭,光标就显示出来了message.exec_()def wheelevent(self, event):
……
def addrs_ok(self):
……
注:网址栏是这个自定义myqlineedit类的实例4、视频全屏显示代码self.part = ''# 初始化储存视频父实例变量webview.settings().setattribute(qwebenginesettings.fullscreensupportenabled, true)# 设置允许网页视频全屏显示webview.page().fullscreenrequested.connect(self._fullscreenrequested)# 设置视频全屏指令关联_fullscreenrequested方法def _fullscreenrequested(self,request):# 自定义视频全屏显示或切换正常的_fullscreenrequested 方法request.accept()if request.toggleon():
# 以下代码切换视频全屏显示self.part = self.webview.parent()self.webview.setparent(none)self.webview.showfullscreen()else:# 以下代码切换视频正常显示 self.webview.setparent(self.part)self.webview.shownormal()5、调用第三方软件的示例代码def word(self):# 自定义调用word方法for i in range(0, len(webview_parent_group)): webview_parent_group[i].releasekeyboard()# 遍列网页父类数组变量,逐个使“全屏模式”失效,让wps文档软件接管键盘输入popen(["/root/opt/kingsoft/wps-office/office6/wps" ])# 调用内置函数运行wps文档软件def gscan2pdf(self):# 自定义调用gscan2pdf方法for i in range(0, len(webview_parent_group)): webview_parent_group[i].releasekeyboard()# 遍列网页父类数组变量,逐个使“全屏模式”失效,让扫描软件接管键盘输入popen(["/usr/bin/gscan2pdf"])# 调用内置函数运行gscan2pdf 扫描软件6、python程序编译命令在pycharm开发平台的terminal下,运行以下命令执行编译:/usr/local/python3/bin/pyinstaller
ꢀ--
clean
ꢀ-
dw
ꢀ--
noconsole
ꢀ--
noconfirm
ꢀ–
i // img/hahayaya_logo1.pngbzweb.py注:主程序是bzweb.py,img/hahayaya_logo1.png是程序图标,编译后的执行程序bzweb放在dist/ bzweb 目录下。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1