Search code examples
pythonpyqtpyqt4qwebview

QWebView Wont Display Webpage


I recently created a Web Browser using PyQt4 in PyCharm, when I ran the program my web browser popped up, I then typed:

http://www.google.com

However, the screen remained white.

Here is the code below:

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(1269, 670)
        MainWindow.setAutoFillBackground(False)
        MainWindow.setStyleSheet(_fromUtf8("background: url(:/path/to-your-resource.png)"))
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.tb_back = QtGui.QToolButton(self.centralwidget)
        self.tb_back.setGeometry(QtCore.QRect(10, 20, 41, 31))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/icons/back.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.tb_back.setIcon(icon)
        self.tb_back.setIconSize(QtCore.QSize(32, 32))
        self.tb_back.setObjectName(_fromUtf8("tb_back"))
        self.tb_reload = QtGui.QToolButton(self.centralwidget)
        self.tb_reload.setGeometry(QtCore.QRect(60, 20, 41, 31))
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/icons/reload.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.tb_reload.setIcon(icon1)
        self.tb_reload.setIconSize(QtCore.QSize(32, 32))
        self.tb_reload.setObjectName(_fromUtf8("tb_reload"))
        self.tb_forword_2 = QtGui.QToolButton(self.centralwidget)
        self.tb_forword_2.setGeometry(QtCore.QRect(110, 20, 41, 31))
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/icons/forword.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.tb_forword_2.setIcon(icon2)
        self.tb_forword_2.setIconSize(QtCore.QSize(32, 32))
        self.tb_forword_2.setObjectName(_fromUtf8("tb_forword_2"))
        self.tb_home = QtGui.QToolButton(self.centralwidget)
        self.tb_home.setGeometry(QtCore.QRect(160, 20, 41, 31))
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/icons/home.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.tb_home.setIcon(icon3)
        self.tb_home.setIconSize(QtCore.QSize(32, 32))
        self.tb_home.setObjectName(_fromUtf8("tb_home"))
        self.ln_addressbar = QtGui.QLineEdit(self.centralwidget)
        self.ln_addressbar.setGeometry(QtCore.QRect(210, 20, 491, 31))
        self.ln_addressbar.setObjectName(_fromUtf8("ln_addressbar"))
        self.tb_search = QtGui.QToolButton(self.centralwidget)
        self.tb_search.setGeometry(QtCore.QRect(710, 20, 41, 31))
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/icons/search.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.tb_search.setIcon(icon4)
        self.tb_search.setIconSize(QtCore.QSize(32, 32))
        self.tb_search.setObjectName(_fromUtf8("tb_search"))
        self.webView = QtWebKit.QWebView(self.centralwidget)
        self.webView.setGeometry(QtCore.QRect(0, 60, 1261, 591))
        self.webView.setUrl(QtCore.QUrl(_fromUtf8("about:blank")))
        self.webView.setObjectName(_fromUtf8("webView"))
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "Neel\'s Web Browser", None))
        self.tb_back.setText(_translate("MainWindow", "...", None))
        self.tb_reload.setText(_translate("MainWindow", "...", None))
        self.tb_forword_2.setText(_translate("MainWindow", "...", None))
        self.tb_home.setText(_translate("MainWindow", "...", None))
        self.tb_search.setText(_translate("MainWindow", "...", None))

from PyQt4 import QtWebKit


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

In order to solve this problem I tried

www.google.com

Yet the problem persisted.

If this helps, I ran this code in PyCharm community application.


Solution

  • The problem is that even if you place the url, the QWebView does not know that you have placed it, for this you must use a signal (in this case editingFinished, which is executed when you hit the enter or return key), another problem is that you need to add the prefix: http://

    self.ln_addressbar.editingFinished.connec(self.OnEditingFinished)
    
    def OnEditingFinished(self):
        self.webView.setUrl(QtCore.QUrl("http://"+self.ln_addressbar.text()))
    

    Complete code:

    from PyQt4 import QtCore, QtGui
    
    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        def _fromUtf8(s):
            return s
    
    try:
        _encoding = QtGui.QApplication.UnicodeUTF8
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig, _encoding)
    except AttributeError:
        def _translate(context, text, disambig):
            return QtGui.QApplication.translate(context, text, disambig)
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName(_fromUtf8("MainWindow"))
            MainWindow.resize(1269, 670)
            MainWindow.setAutoFillBackground(False)
            MainWindow.setStyleSheet(_fromUtf8("background: url(:/path/to-your-resource.png)"))
            self.centralwidget = QtGui.QWidget(MainWindow)
            self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
            self.tb_back = QtGui.QToolButton(self.centralwidget)
            self.tb_back.setGeometry(QtCore.QRect(10, 20, 41, 31))
            icon = QtGui.QIcon()
            icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/icons/back.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.tb_back.setIcon(icon)
            self.tb_back.setIconSize(QtCore.QSize(32, 32))
            self.tb_back.setObjectName(_fromUtf8("tb_back"))
            self.tb_reload = QtGui.QToolButton(self.centralwidget)
            self.tb_reload.setGeometry(QtCore.QRect(60, 20, 41, 31))
            icon1 = QtGui.QIcon()
            icon1.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/icons/reload.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.tb_reload.setIcon(icon1)
            self.tb_reload.setIconSize(QtCore.QSize(32, 32))
            self.tb_reload.setObjectName(_fromUtf8("tb_reload"))
            self.tb_forword_2 = QtGui.QToolButton(self.centralwidget)
            self.tb_forword_2.setGeometry(QtCore.QRect(110, 20, 41, 31))
            icon2 = QtGui.QIcon()
            icon2.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/icons/forword.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.tb_forword_2.setIcon(icon2)
            self.tb_forword_2.setIconSize(QtCore.QSize(32, 32))
            self.tb_forword_2.setObjectName(_fromUtf8("tb_forword_2"))
            self.tb_home = QtGui.QToolButton(self.centralwidget)
            self.tb_home.setGeometry(QtCore.QRect(160, 20, 41, 31))
            icon3 = QtGui.QIcon()
            icon3.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/icons/home.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.tb_home.setIcon(icon3)
            self.tb_home.setIconSize(QtCore.QSize(32, 32))
            self.tb_home.setObjectName(_fromUtf8("tb_home"))
            self.ln_addressbar = QtGui.QLineEdit(self.centralwidget)
            self.ln_addressbar.setGeometry(QtCore.QRect(210, 20, 491, 31))
            self.ln_addressbar.setObjectName(_fromUtf8("ln_addressbar"))
    
            self.ln_addressbar.editingFinished.connec(self.OnEditingFinished)
            self.tb_search = QtGui.QToolButton(self.centralwidget)
            self.tb_search.setGeometry(QtCore.QRect(710, 20, 41, 31))
            icon4 = QtGui.QIcon()
            icon4.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/icons/search.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
            self.tb_search.setIcon(icon4)
            self.tb_search.setIconSize(QtCore.QSize(32, 32))
            self.tb_search.setObjectName(_fromUtf8("tb_search"))
            self.webView = QtWebKit.QWebView(self.centralwidget)
            self.webView.setGeometry(QtCore.QRect(0, 60, 1261, 591))
            self.webView.setUrl(QtCore.QUrl(_fromUtf8("about:blank")))
            self.webView.setObjectName(_fromUtf8("webView"))
            MainWindow.setCentralWidget(self.centralwidget)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            MainWindow.setWindowTitle(_translate("MainWindow", "Neel\'s Web Browser", None))
            self.tb_back.setText(_translate("MainWindow", "...", None))
            self.tb_reload.setText(_translate("MainWindow", "...", None))
            self.tb_forword_2.setText(_translate("MainWindow", "...", None))
            self.tb_home.setText(_translate("MainWindow", "...", None))
            self.tb_search.setText(_translate("MainWindow", "...", None))
    
        def OnEditingFinished(self):
            self.webView.setUrl(QtCore.QUrl("http://"+self.ln_addressbar.text()))
    
    from PyQt4 import QtWebKit
    
    
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        MainWindow = QtGui.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())