Pyqt5 как установить URL и показать страницу

Я изучаю Python и делаю функцию закладок для практических целей. Теперь я мог зарегистрировать URL-адрес в меню вкладок. и когда я нажимаю ссылку из меню вкладок. в браузере ничего не отображается. в следующей области, пожалуйста, дайте мне знать, что не так. Сам текст "self.browser.setUrl(QUrl(action_url))"(action_url) выглядит нормально, но браузер не показывает.

весь код такой.

      import os
import sys

from PyQt5.QtCore import QSize, Qt, QUrl
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtWidgets import (
    QAction,
    QApplication,
    QDialog,
    QDialogButtonBox,
    QFileDialog,
    QLabel,
    QLineEdit,
    QMainWindow,
    QToolBar,
    QVBoxLayout,
)



class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.browser = QWebEngineView()
        self.browser.setUrl(QUrl("http://google.com"))
        self.setCentralWidget(self.browser)
        
        # tag::navigation1[]
        navtb = QToolBar("Navigation")
        navtb.setIconSize(QSize(16, 16))
        self.addToolBar(navtb)
        
        #bookmark button
        bookmark_btn = QAction(QIcon(os.path.join("icons", "smiley.png")), "Bookmark", self)
        bookmark_btn.setStatusTip("add to bookmark")
        bookmark_btn.triggered.connect(self.add_bookmark)
        navtb.addAction(bookmark_btn)        
        navtb.addSeparator()

        # tag::menuBookmark[]   
        self.bookmark_menu = self.menuBar().addMenu("&Bookmark")        
        bookmark_select_action = QAction("http://google.com",self)
        bookmark_select_action.triggered.connect(self.navigate_bookmark)
        self.bookmark_menu.addAction(bookmark_select_action)
            
        self.show()

    
    # tag::bookmark[]    
    def add_bookmark(self):
        bookmark_title = self.browser.page().title()
        bookmark_url = self.browser.url().toString()
        bookmark_select_action = QAction(bookmark_url,self)
        bookmark_select_action.triggered.connect(self.navigate_bookmark)
        
        self.bookmark_menu.addAction(bookmark_select_action)
            
    
    # tag::navigationBookmark[]   
    def navigate_bookmark(self):
        action = self.sender()
        action_url = '"'+action.text()+'"'
        self.browser.setUrl(QUrl(action_url))   #this code does not function as I expected
        print(action_url)
        


app = QApplication(sys.argv)
app.setApplicationName("Mozzarella Ashbadger")
app.setOrganizationName("Mozzarella")
app.setOrganizationDomain("mozzarella.org")

window = MainWindow()

app.exec_()  

1 ответ

Я не понимаю, почему вы заключаете текст в кавычки. В общем, если у вас есть строка, и вы хотите преобразовать ее в QUrlиспользовать QUrl::fromUserInput(), также используйте load()метод:

      def navigate_bookmark(self):
    action = self.sender()
    url = QUrl.fromUserInput(action.text())
    self.browser.load(url)

Другая стратегия состоит в том, чтобы сохранить QUrl в QAction, а затем получить его:

      def add_bookmark(self):
    bookmark_title = self.browser.page().title()
    bookmark_url = self.browser.url()
    bookmark_select_action = QAction(bookmark_url.toString(), self)
    bookmark_select_action.setData(bookmark_url)
    # or
    # bookmark_select_action.setProperty("url", bookmark_url)
    bookmark_select_action.triggered.connect(self.navigate_bookmark)
    self.bookmark_menu.addAction(bookmark_select_action)
      def navigate_bookmark(self):
    action = self.sender()
    url = action.data()
    # or
    # url = action.property("url")
    self.browser.load(url)
Другие вопросы по тегам