1

私はこの質問に対するX.Jacobsの回答に従い、異なるパラメーターで複数のウィンドウを開くアプリを作成しようとしましたが、アプリがウィンドウを開いているように見えますが、Webページをロードしていません。

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

1 に答える 1

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_()
于 2012-12-19T21:10:51.373 に答える