【发布时间】:2019-01-23 15:39:17
【问题描述】:
这是我之前删除的帖子的转贴。在第一篇文章中,我问是否有人知道使用 PyQT5 创建书签的方法,但是,最初,我没有用我的方式发布我现在遇到的问题。我的网络浏览器中有 3 个工具栏。
- 对于其他按钮 - 退出、最小化、最大化等。
- 用于网络导航。
- 书签都是用 QToolBar() 的实例创建的。
书签工具栏代码
self.bookmark_bar = QToolBar('Bookmark')
self.bookmark_bar.setIconSize(QSize(12, 12))
self.bookmark_bar.setMovable(False)
self.addToolBar(self.bookmark_bar)
创建工具栏后添加按钮,因为那里有很多代码,我将仅显示最终结果作为屏幕截图和 init 函数中的最后几行代码。
最后几行代码:
self.add_new_tab(QUrl('http://www.google.com'), 'Home Page')
self.bookmarks_load()
self.show()
self.setWindowTitle('Tempo')
Web 浏览器本身一切正常,因为除了书签之外一切正常。代码行“bookmarks_load()”从 .txt 文件加载书签。至于现在 .txt 文档中的书签是 youtube.com(无论使用哪个链接)。书签功能:
将网站添加到书签.txt
def Bookmark(self):
try:
qurl = QUrl(self.urlbar.text())
print('Here we are using the QUrl toString method: %s ---> Type: %s' % (qurl.toString(), type(qurl)))
url = qurl.toString()
print('Here we are storing the new string to a new variable: %s ---> Type: %s' % (url, type(url)))
b = open(os.path.join('bookmarks', 'bookmarks.txt'), "wb")
self.bookmarks_write = pickle.dump(url, b)
b.close()
except:
print("Crash - Bookmarks not stored")
self.bookmark_btn.setText("★")
从文档文件中加载书签。
def bookmarks_load(self):
try:
bookmarks_open = open(os.path.join('bookmarks', 'bookmarks.txt'), 'rb')
self.bookmarks_write = pickle.load(bookmarks_open)
bookmarks_open.close()
self.create_bookmarks()
except:
bookmarks_open = open(os.path.join('bookmarks', 'bookmarks.txt'), 'wb')
bookmarks = 'http://www.stackoverflow.com'
self.bookmarks_write = pickle.dump(bookmarks, bookmarks_open)
bookmarks_open.close()
self.create_bookmarks()
print('Crash - Did not load bookmarks')
创建书签“按钮”,按下时打开该网站的新标签。
def create_bookmarks(self):
bookmark_list = []
try:
for book in self.bookmarks_write.split():
print(book)
bookmark_list.append(book)
print(bookmark_list)
except:
print("Something went wrong with the list")
try:
button = QAction(QIcon(os.path.join('images', 'tab_icon.PNG')), 'Open bookmark', self)
button.triggered.connect(self.add_new_tab(QUrl(bookmark_list[0]), 'New'))
self.bookmark_bar.addAction(button)
except:
print('Button is causing the error')
现在这是我开始遇到问题的部分。如果我删除 -triggered.connect 行并且我没有向该“按钮”添加任何功能,那么一切都会启动并正常工作,没有任何错误。它存储并可以加载书签。但是,当添加该行时,它会崩溃并且不会创建按钮(应用程序不会退出,因为有一个捕获错误的异常语句 - pyqt 没有显示它是什么错误。)。这是 add_new_tab() 函数:
def add_new_tab(self, qurl=None, label='Blank'):
if qurl is None:
qurl = QUrl('')
web_browser = QWebEngineView()
web_browser.setUrl(qurl)
web_browser.adjustSize()
index = self.tabs.addTab(web_browser, label)
self.tabs.setCurrentIndex(index)
web_browser.urlChanged.connect(lambda qurl, web_browser=web_browser:
self.update_urlbar(qurl, web_browser))
web_browser.loadFinished.connect(lambda _, i=index, web_browser=web_browser:
self.tabs.setTabText(i, web_browser.page().title()))
最初我使用此功能通过“双击”标签栏来打开标签:
def tab_open_doubleclick(self, index):
if index == -1:
self.add_new_tab()
正如您在触发器上看到的 - 我确实将链接作为 QUrl 传递,并且添加了一个测试标签。我遇到的问题不知何故不想工作,我找不到原因,因为 Python PyQT5 没有显示错误,它只是用返回码关闭。
截图作为解释:
链接未添加到书签.txt
链接添加到bookmarks.txt
Pickle 会在 .txt 中转储链接
运行“except”语句,而trigger.connect行没有被注释掉。
【问题讨论】:
标签: python pyqt pyqt5 bookmarks qwebengineview