上一篇博客已经讲过了井字棋游戏的开发。传送门:
这次我们来开发一个叫做“tbr”的浏览器。[aru_12]
所需 Python 版本
Python 2.7.x
Python 安装方法
Windows
下载以下安装包进行安装即可:
蓝奏云Linux
请到 官网 获取帮助。[aru_11]
所需 Python 模块
- PyQt4
- time(自带)
- urllib2(通常自带)
- sys(自带)
模块安装方法
方法一荐
如果你用的是 Windows,建议使用上文方法安装 Python 2.7。[aru_14]
方法二
请下载这个种子文件中的三个文件夹,并将这三个文件夹移动到 Python 根目录的 Lib\site-packages\ 下。[aru_17] 戳我下载
代码
# -*- coding: UTF-8 -*- import sys, urllib2, time from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import * from PyQt4.QtNetwork import * # 变量 now_url = 'guide' dangerous = ['www.github.com', 'github.com'] # 危险网站,这里把 github 当作例子 # 加载网页 class WebView(QWebView): def __init__(self, parent = None): super(WebView, self).__init__(parent) def linkClicked(self, url): global now_url now_url = str(url).strip("')") now_url = now_url.split("PyQt4.QtCore.QUrl(u'")[1] browser.addressBar.setText(now_url) address = browser.addressBar.text() self.load(url) if now_url.split('/')[2] in dangerous or now_url in dangerous: browser.setWindowTitle(u"YchBrPro - 危险浏览") QMessageBox.critical(browser, u"危险!", u"您将要访问危险网站!", QMessageBox.Ok) # 网页显示部分主体 class WebPage(QWebPage): def __init__(self, parent = None): super(WebPage, self).__init__(parent) def javaScriptConsoleMessage(self, s, l, n): QMessageBox.information(browser, u"Console 第%s行显示" % l, str(s), QMessageBox.Ok) def mousePressEvent(self, e): address = str(browser._view.url()).strip("')") address = address.split("PyQt4.QtCore.QUrl(u'")[1] browser.addressBar.setText(address) def userAgentForUrl(self, url): return "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 tbr/1.0" # 浏览器外表框架 class MyBrowser(QWidget): def __init__(self, parent = None): super(MyBrowser, self).__init__(parent) self.showMaximized() self.createLayout() self.createConnection() # 浏览网页 def search(self): address = str(self.addressBar.text()) if address: if address.find('://') == -1 and address != 'guide': address = 'http://' + address url = QUrl(address) self._view.load(url) self.addressBar.setText(address) address = str(self.addressBar.text()) if "https://" in address: self.setWindowTitle(u"YchBrPro - 安全浏览") elif "http://" in address: self.setWindowTitle(u"YchBrPro - 未知浏览") address = str(self.addressBar.text()) if address.split('/')[0] + address.split('/')[1] + address.split('/')[2] in dangerous or address in dangerous: self.setWindowTitle(u"YchBrPro - 危险浏览") QMessageBox.critical(self, u"危险!", u"您将要访问危险网站!", QMessageBox.Ok); # 各种按钮 def createLayout(self): self.setWindowTitle(u"YchBrPro - 安全浏览") self.setWindowIcon(QIcon('favicon.png')) self.addressBar = QLineEdit() self.addressBar.setText("https://ych-template.com/guide.html") self.goButton = QPushButton(u"浏览") self.renewButton = QPushButton(u"刷新") self.backButton = QPushButton(u"后退") self.nextButton = QPushButton(u"前进") self.goButton.setFont(QFont("Microsoft YaHei", 10)) self.renewButton.setFont(QFont("Microsoft YaHei", 10)) self.addressBar.setFont(QFont("Consolas", 12)) self.backButton.setFont(QFont("Microsoft YaHei", 10)) self.nextButton.setFont(QFont("Microsoft YaHei", 10)) bl = QHBoxLayout() bl.addWidget(self.addressBar) bl.addWidget(self.goButton) bl.addWidget(self.renewButton) bl.addWidget(self.backButton) bl.addWidget(self.nextButton) self.goButton.setCursor(Qt.PointingHandCursor) self.renewButton.setCursor(Qt.PointingHandCursor) self.backButton.setCursor(Qt.PointingHandCursor) self.nextButton.setCursor(Qt.PointingHandCursor) self._page = WebPage() self._page.userAgentForUrl = "Mozila/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36 tbr/1.0" self._view = WebView() self._view.setPage(self._page) self._window = QMainWindow() self._window.setCentralWidget(self._view) url = QUrl("https://www.ych-template.com/guide.html") self._view.load(url) layout = QVBoxLayout() layout.addLayout(bl) layout.addWidget(self._window) self._view.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks) self._view.page().linkClicked.connect(self._view.linkClicked) self.setLayout(layout) # 刷新 def renew(self): self._view.reload() if now_url.split('/')[2] in dangerous or now_url in dangerous: self.setWindowTitle(u"YchBrPro - 危险浏览") QMessageBox.critical(browser, u"危险!", u"您将要访问危险网站!", QMessageBox.Ok) # 后退 def goBack(self): self._view.back() if now_url.split('/')[2] in dangerous or now_url in dangerous: self.setWindowTitle(u"YchBrPro - 危险浏览") QMessageBox.critical(browser, u"危险!", u"您将要访问危险网站!", QMessageBox.Ok) # 前进 def goNext(self): self._view.forward() if now_url.split('/')[2] in dangerous or now_url in dangerous: self.setWindowTitle(u"YchBrPro - 危险浏览") QMessageBox.critical(browser, u"危险!", u"您将要访问危险网站!", QMessageBox.Ok) # 对按钮做出反应 def createConnection(self): self.connect(self.addressBar, SIGNAL('returnPressed()'), self.search) self.connect(self.addressBar, SIGNAL('returnPressed()'), self.addressBar, SLOT('selectAll()')) self.connect(self.goButton, SIGNAL('clicked()'), self.search) self.connect(self.renewButton, SIGNAL('clicked()'), self.renew) self.connect(self.backButton, SIGNAL('clicked()'), self.goBack) self.connect(self.nextButton, SIGNAL('clicked()'), self.goNext) self.connect(self.goButton, SIGNAL('clicked()'), self.addressBar, SLOT('selectAll()')) app = QApplication(sys.argv) browser = MyBrowser() browser.show() sys.exit(app.exec_())
依旧是没有很多注释 …… 应该不需要吧 …… [aru_31]
这里还有一个图片需要下载,就是本站的图标:
请注意,只有 Chrome / 火狐 可以下载!其它浏览器用户请切换浏览器或点击下方按钮并手动保存图片。[aru_33]
请将此图片放置至 py 文件的同一文件夹。
还是上次的那句话,Python 2 与 Python 3 不兼容,请卸载其中一个![aru_42]
使用代码、运行、打包的方法都在上一篇博客讲过。传送门在博客的第一段。[aru_22]
本文作者为Blogych,转载请注明。
不错的哈