Open multiple webpages with different parametrs. PyQt4

爷,独闯天下 提交于 2019-12-11 10:22:53

问题


I have followed the answer by X.Jacobs on this Question, and was trying to create an app that will open multiple windows with different parameters, but it doesn't work, looks, like app is opening windows, but not load the webpage.

#! /usr/bin/env python2.7

from PyQt4.QtCore import *
from PyQt4.QtGui import*
from PyQt4.QtWebKit import *
import sys, signal

url = 'http://http://forums.fedoraforum.org/showthread.php?t={0}'

class Opener(QWebView):
    def __init__(self, param=None):
        QWebView.__init__(self)
        self.param = param
        self.loadFinished.connect(self.print_title)

    def print_title(self):
        print self.title()

class Foo(QObject):
    def __init__(self):
        QObject.__init__(self)
        self.count = 0
        self.params = range(4)
        self.mapper = QSignalMapper(self)
        self.mapper.mapped.connect(self.mapper_mapped)

        for i in range(2):
            opener = Opener()
            opener.loadFinished.connect(self.mapper.map)
            self.mapper.setMapping(opener, i)
            opener.loadFinished.emit(True)
            QTimer.singleShot(1, lambda:opener.loadFinished.emit(True))  

    def mapper_mapped(self, gNumber):
        self.count += 1
        if self.count < len(self.params):
            gParam  = self.params[self.count]
            opener = self.mapper.mapping(gNumber)
            opener.load(QUrl(url.format(gParam)))
            opener.show()
            QTimer.singleShot(1, lambda:opener.loadFinished.emit(True)) 

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main = Foo()
    if signal.signal(signal.SIGINT, signal.SIG_DFL):
        sys.exit(app.exec_()) 
    app_exec_()

回答1:


There's a couple of things going on in that code :) checkout this working version and see how you can adapt it to yours:

#!/usr/bin/env python

from PyQt4.QtCore import *
from PyQt4.QtGui import*
from PyQt4.QtWebKit import *

class Foo(QWidget):
    def __init__(self, parent=None):
        super(Foo, self).__init__(parent)    

        self.count  = 0
        self.params = range(4)
        self.url    = 'http://forums.fedoraforum.org/showthread.php?t={0}'

        self.gridLayout = QGridLayout(self)
        self.tabWidget = QTabWidget(self)
        self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)

        self.mapper = QSignalMapper(self)
        self.mapper.mapped.connect(self.on_mapper_mapped)

        for i in range(2):
            grabber = QWebView()
            grabber.loadFinished.connect(self.mapper.map)

            self.mapper.setMapping(grabber, i)
            self.tabWidget.addTab(grabber, "opener {0}".format(str(i)))

            grabber.loadFinished.emit(True)

    @pyqtSlot(int)
    def on_mapper_mapped(self, gNumber):
        self.count += 1
        if self.count < len(self.params):
            gParam = self.params[self.count]

            opener = self.mapper.mapping(gNumber)
            opener.load(QUrl(self.url.format(gParam)))

if __name__ == "__main__":
    import  sys

    app = QApplication(sys.argv)
    main = Foo()
    main.show()
    app.exec_()


来源:https://stackoverflow.com/questions/13960040/open-multiple-webpages-with-different-parametrs-pyqt4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!