Python PyQT-Web浏览器|书签

时间:2018-08-16 15:57:03

标签: python pyqt pyqt5 bookmarks qwebengineview

这是我之前删除的帖子的转发。在第一篇文章中,我问是否有人知道使用PyQT5创建书签的方法,但是,最初,我没有以自己的方式发布我现在遇到的问题。我的网络浏览器中有3个工具栏。

  1. 对于其他按钮,例如-退出,最小化,最大化等。
  2. 用于在网络中导航。
  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 函数中的最后几行代码。

How the Web Browser looks

最后几行代码:

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行,并且未向该“按钮”添加任何功能,则所有程序都会启动并正常工作,而不会出现任何错误。它存储并可以加载书签。但是,添加该行时,它会崩溃并且不会创建按钮(该应用程序不会退出,因为存在捕获错误的except语句-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没有显示错误,它只是用返回代码关闭。

屏幕截图作为解释:


链接未添加到bookmarks.txt

Link not added to a bookmarks.txt

链接已添加到bookmarks.txt

Link added to bookmarks.txt

Pickle确实将链接转储为.txt

Pickle does dump the link in .txt

运行“ except”语句,而未注释掉trigger.connect行。

The "except" statement is run, while the triggered.connect line is not commented out.

该应用程序继续运行,但是没有加载的书签按钮。 Empty bookmarks bar

1 个答案:

答案 0 :(得分:1)

在下面的示例中,我演示了如何添加书签的功能,因为它使用QSettings来存储数据,但是为此必须使用setOrganizationName()setOrganizationDomain()和{{ 1}}。另外,我还添加了获取网页标题的功能。 BookMarkToolBar类具有bookmarkClicked方法,该方法返回与BookMark和标题关联的URL。

setApplicationName()

enter image description here