1

我正在使用 PyQt5 WebKit 制作一个带有搜索框的非常简单的浏览器。这是我正在使用的代码:

import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QAction, QLineEdit, QMessageBox, QMainWindow, QGridLayout)
from PyQt5.QtWebKitWidgets import QWebView


class App(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        centralWidget   = QWidget()
        self.setCentralWidget(centralWidget)

        self.searchbox = QLineEdit("", self)
        self.go = QPushButton('Go', self)
        self.go.clicked.connect(self.gourl)  
        self.webview = Browser()        

        self.grid = QGridLayout(centralWidget)
        self.grid.addWidget(self.webview, 0, 0, 1, 4)
        self.grid.addWidget(self.searchbox, 1, 0)
        self.grid.addWidget(self.go, 1, 1)

    def gourl(self):
        url = self.searchbox.text()
        self.webview.load(QUrl(url))


class Browser(QWebView):   #(QWebView):
    windowList = []
    def createWindow(self, QWebEnginePage_WebWindowType):
        App.setCentralWidget(Browser())
        #new_window.show()
        self.windowList.append(App())  
        return Browser()

if __name__ == "__main__":    
    app = QApplication(sys.argv)
    box = App()
    box.setWindowTitle('Browser')
    box.resize(600, 500)
    box.show()
    sys.exit(app.exec_())

我想用用户当前使用的任何 URL 来更新框中的 URL。我不知道该怎么做,任何帮助将不胜感激。

4

1 回答 1

1

下面是你的例子的重写,它应该做你想做的事。

该类Browser已被修复,以便它App在请求新窗口时创建一个新实例。您可以通过右键单击链接并选择在新窗口中打开来测试它。只要搜索框发生变化,搜索框就会自动更新为新的 url。

import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QAction, QLineEdit, QMessageBox, QMainWindow, QGridLayout)
from PyQt5.QtWebKitWidgets import QWebView


class App(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        centralWidget   = QWidget()
        self.setCentralWidget(centralWidget)

        self.searchbox = QLineEdit("", self)
        self.go = QPushButton('Go', self)
        self.go.clicked.connect(self.gourl)
        self.webview = Browser()
        self.webview.urlChanged.connect(self.handleUrlChanged)

        self.grid = QGridLayout(centralWidget)
        self.grid.addWidget(self.webview, 0, 0, 1, 4)
        self.grid.addWidget(self.searchbox, 1, 0)
        self.grid.addWidget(self.go, 1, 1)

    def gourl(self):
        url = self.searchbox.text()
        self.webview.load(QUrl(url))

    def handleUrlChanged(self, url):
        self.searchbox.setText(url.toString())


class Browser(QWebView):
    windowList = []

    def createWindow(self, wintype):
        window = App()
        self.windowList.append(window)
        window.show()
        return window.webview

    def closeEvent(self, event):
        self.windowList.remove(self)
        super().closeEvent(event)


if __name__ == "__main__":

    app = QApplication(sys.argv)
    box = App()
    box.setWindowTitle('Browser')
    box.resize(600, 500)
    box.show()
    sys.exit(app.exec_())
于 2019-09-15T16:03:34.557 回答