Почему постоянно падает программа?
Пытаюсь разобраться в написании браузеров на PyQt5. По какой-то неизвестной мне причине постоянно падает ниже указанный код, хотя вроде бы все написано без ошибок.
Проблема в оборудовании или все же в коде где-то допущена ошибка?
import os
import sys
from PyQt5.Qt import *
from PyQt5.QtWebEngineWidgets import QWebEngineView
class AboutDialog(QDialog):
def __init__(self, *args, **kwargs):
super(AboutDialog, self).__init__(*args,**kwargs)
QBtn = QDialogButtonBox.Ok
self.buttonbox = QDialogButtonBox(QBtn)
self.buttonbox.accepted.connect(self.accept)
self.buttonbox.rejected.connect(self.reject)
layout = QVBoxLayout()
title = QLabel("Viola Browser")
font = title.font()
font.setPointSize(20)
title.setFont(font)
layout.addWidget(title)
logo = QLabel()
logo.setPixmap(QPixmap(os.path.join("images", "logo.png")))
layout.addWidget(logo)
layout.addWidget(QLabel("Version 0.1"))
for i in range(0, layout.count()):
layout.itemAt(i).setAlignment(Qt.AlignHCenter)
layout.addWidget(self.buttonbox)
self.setLayout(layout)
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow,self).__init__(*args,**kwargs)
self.browser = QWebEngineView()
self.browser.setUrl(QUrl("https://google.com"))
self.browser.urlChanged.connect(self.update_urlbar)
self.browser.loadFinished.connect(self.update_title)
self.setCentralWidget(self.browser)
self.status = QStatusBar()
self.setStatusBar(self.status)
navtb = QToolBar("Navigation")
navtb.setIconSize(QSize(16,16))
self.addToolBar(navtb)
back_btn = QAction(QIcon(os.path.join("images","arrow-180.png")), "Back", self)
back_btn.setStatusTip("Back to previous page")
back_btn.triggered.connect(self.browser.back)
navtb.addAction(back_btn)
next_btn = QAction(QIcon(os.path.join("images","arrow-000.png")), "Forward", self)
next_btn.setStatusTip("Forward to previous page")
next_btn.triggered.connect(self.browser.forward)
navtb.addAction(next_btn)
reload_btn = QAction(QIcon(os.path.join("images", "arrow-circle-315.png")), "Reload", self)
reload_btn.setStatusTip("Reload page")
reload_btn.triggered.connect(self.browser.reload)
navtb.addAction(reload_btn)
home_btn = QAction(QIcon(os.path.join("images", "home.png")), "Home", self)
home_btn.setStatusTip("Go home")
home_btn.triggered.connect(self.navigate_home)
navtb.addAction(home_btn)
navtb.addSeparator()
self.httpsicon = QLabel()
self.httpsicon.setPixmap(QPixmap(os.path.join("images", "lock-noss1.png")))
navtb.addWidget(self.httpsicon)
self.urlbar = QLineEdit()
self.urlbar.returnPressed.connect(self.navigate_to_url)
navtb.addWidget(self.urlbar)
stop_btn = QAction(QIcon(os.path.join("images", "cross-circle.png")), "Stop", self)
stop_btn.setStatusTip("Stop loading current page")
stop_btn.triggered.connect(self.browser.stop)
navtb.addAction(stop_btn)
file_menu = self.menuBar().addMenu("&File")
open_file_action = QAction(QIcon(os.path.join("images", "disk--arrow.png")), "Open file", self)
open_file_action.setStatusTip("Open from file")
open_file_action.triggered.connect(self.open_file)
file_menu.addAction(open_file_action)
help_menu = self.menuBar().addMenu("&Help")
about_action = QAction(QIcon(os.path.join("images", "question.png")), "About browser", self)
about_action.setStatusTip("Find out more about browser")
about_action.triggered.connect(self.about)
help_menu.addAction(about_action)
def update_title(self):
title = self.browser.page().title()
self.setWindowTitle("%s - Viola" % title)
def about(self):
pass
def open_file(self):
filename, _ = QFileDialog.getOpenFileName(self,"Open file", "",
"*.htm *.html"
"All files (*.*)")
if filename:
with open(filename, "r") as f:
html = f.read()
self.browser.setHtml(html)
self.urlbar.setText(filename)
def save_file(self):
filename, _ = QFileDialog.getSaveFileName(self,"save page as", "",
"*.htm *.html"
"All files (*.*)")
if filename:
html = self.browser.page().toHtml()
with open(filename, "w") as f:
f.write(html)
def navigate_home(self):
self.browser.setUrl(QUrl("https://google.com"))
def navigate_to_url(self):
q = QUrl(self.urlbar.text())
if q.scheme() == "":
q.setSheme("http")
self.browser.setUrl(q)
def update_urlbar(self, q ):
if q.sheme() == "https":
self.httpsicon.setPixmap(QPixmap(os.path.join("images", "lock-ss1.png")))
else:
self.httpsicon.setPixmap(QPixmap(os.path.join("images", "lock-noss1.png")))
self.urlbar.setText(q.toString())
self.urlbar.setCursorPosition(0)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Я не все проверил, но два места отметил для вашего внимания.
import os
import sys
from PyQt5.Qt import *
from PyQt5.QtWebEngineWidgets import QWebEngineView
class AboutDialog(QDialog):
def __init__(self, *args, **kwargs):
super(AboutDialog, self).__init__(*args,**kwargs)
QBtn = QDialogButtonBox.Ok
self.buttonbox = QDialogButtonBox(QBtn)
self.buttonbox.accepted.connect(self.accept)
self.buttonbox.rejected.connect(self.reject)
layout = QVBoxLayout()
title = QLabel("Viola Browser")
font = title.font()
font.setPointSize(20)
title.setFont(font)
layout.addWidget(title)
logo = QLabel()
logo.setPixmap(QPixmap(os.path.join("images", "logo.png")))
layout.addWidget(logo)
layout.addWidget(QLabel("Version 0.1"))
for i in range(0, layout.count()):
layout.itemAt(i).setAlignment(Qt.AlignHCenter)
layout.addWidget(self.buttonbox)
self.setLayout(layout)
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow,self).__init__(*args,**kwargs)
self.browser = QWebEngineView()
self.browser.setUrl(QUrl("https://google.com"))
self.browser.urlChanged.connect(self.update_urlbar)
self.browser.loadFinished.connect(self.update_title)
self.setCentralWidget(self.browser)
self.status = QStatusBar()
self.setStatusBar(self.status)
navtb = QToolBar("Navigation")
navtb.setIconSize(QSize(16,16))
self.addToolBar(navtb)
back_btn = QAction(QIcon(os.path.join("images","arrow-180.png")), "Back", self)
back_btn.setStatusTip("Back to previous page")
back_btn.triggered.connect(self.browser.back)
navtb.addAction(back_btn)
next_btn = QAction(QIcon(os.path.join("images","arrow-000.png")), "Forward", self)
next_btn.setStatusTip("Forward to previous page")
next_btn.triggered.connect(self.browser.forward)
navtb.addAction(next_btn)
reload_btn = QAction(QIcon(os.path.join("images", "arrow-circle-315.png")), "Reload", self)
reload_btn.setStatusTip("Reload page")
reload_btn.triggered.connect(self.browser.reload)
navtb.addAction(reload_btn)
home_btn = QAction(QIcon(os.path.join("images", "home.png")), "Home", self)
home_btn.setStatusTip("Go home")
home_btn.triggered.connect(self.navigate_home)
navtb.addAction(home_btn)
navtb.addSeparator()
self.httpsicon = QLabel()
self.httpsicon.setPixmap(QPixmap(os.path.join("images", "lock-noss1.png")))
navtb.addWidget(self.httpsicon)
self.urlbar = QLineEdit()
self.urlbar.returnPressed.connect(self.navigate_to_url)
navtb.addWidget(self.urlbar)
stop_btn = QAction(QIcon(os.path.join("images", "cross-circle.png")), "Stop", self)
stop_btn.setStatusTip("Stop loading current page")
stop_btn.triggered.connect(self.browser.stop)
navtb.addAction(stop_btn)
file_menu = self.menuBar().addMenu("&File")
open_file_action = QAction(QIcon(os.path.join("images", "disk--arrow.png")), "Open file", self)
open_file_action.setStatusTip("Open from file")
open_file_action.triggered.connect(self.open_file)
file_menu.addAction(open_file_action)
help_menu = self.menuBar().addMenu("&Help")
about_action = QAction(QIcon(os.path.join("images", "question.png")), "About browser", self)
about_action.setStatusTip("Find out more about browser")
about_action.triggered.connect(self.about)
help_menu.addAction(about_action)
def update_title(self):
title = self.browser.page().title()
self.setWindowTitle("%s - Viola" % title)
def about(self):
pass
def open_file(self):
# !!!
filename, _ = QFileDialog.getOpenFileName(
self,
"Open file",
"images",
# "*.htm *.html"
# "All files (*.*)"
'HTML Files (*.html);;HTM Files (*.HTM)' # +++
)
if filename:
with open(filename, "r") as f:
html = f.read()
self.browser.setHtml(html)
self.urlbar.setText(filename)
def save_file(self):
filename, _ = QFileDialog.getSaveFileName(self,"save page as", "",
"*.htm *.html"
"All files (*.*)")
if filename:
html = self.browser.page().toHtml()
with open(filename, "w") as f:
f.write(html)
def navigate_home(self):
self.browser.setUrl(QUrl("https://google.com"))
def navigate_to_url(self):
q = QUrl(self.urlbar.text())
if q.scheme() == "":
q.setSheme("http")
self.browser.setUrl(q)
def update_urlbar(self, q ):
print(f'q = {q}') # QtCore.QUrl('https://www.google.com/')
print(f'q = {q.path()}')
# !!! scheme
# if q.sheme() == "https":
if q.scheme() == "https": # +++
# +++ ^^^^^^ установите свои изображения vvvvvvv
self.httpsicon.setPixmap(QPixmap(os.path.join("images", "cat.png")))
else:
self.httpsicon.setPixmap(QPixmap(os.path.join("images", "Blue.png")))
self.urlbar.setText(q.toString())
self.urlbar.setCursorPosition(0)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

