上一篇博客已经讲过了井字棋游戏的开发。传送门:
这次我们来开发一个叫做“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,转载请注明。
不错的哈