打开具有不同参数的多个网页。 PyQt4中

时间:2012-12-19 19:49:17

标签: python qt pyqt pyqt4 qwebview

我已经在X.Jacobs上按Question进行了回答,并试图创建一个应用程序,它将打开多个具有不同参数的窗口,但它不起作用,看起来像app一样打开窗口,但没有加载网页。

#! /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 个答案:

答案 0 :(得分:1)

在该代码中发生了一些事情:)检查这个工作版本并看看如何使其适应你的:

#!/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_()