更新时间:2023-02-15 15:40:58
看看这样的事情是否有效.这个bookie
类所做的就是将loadFinished
被调用的次数存入变量count
中,并返回列表中对应的项参数
.在创建grabber
对象时,它通过QSignalMapper
将其映射到一个数字,因此您可以通过调用mapper.mapping(id-of-grabber-object)
.在修改您的代码之前,您可以继续尝试此代码,看看它是否适合您:
See if something like this works. What this bookie
class does is store the number of times loadFinished
is called into the variable count
, and returns the corresponding item in the list params
. When creating the grabber
objects, it maps it to a number through QSignalMapper
, so you may retrieve the sender of the signal by calling mapper.mapping(id-of-grabber-object)
. You can go ahead and try this code to see if it works for you before modifying yours:
#!/usr/bin/env python
from PyQt4.QtCore import pyqtSlot, QObject, QSignalMapper, QTimer
from PyQt4.QtGui import QApplication
from PyQt4.QtWebKit import QWebView
class bookie(QObject):
def __init__(self, parent=None):
super(bookie, self).__init__(parent)
self.count = 0
self.url = 'http://some website.com/search?param={0}'
self.params = range(100) # instead of [1,2,3,4,5,6,7,8,9,10,11,12] and so on...
Grabber = QWebView # This would be your Grabber class
self.mapper = QSignalMapper(self)
self.mapper.mapped.connect(self.on_mapper_mapped)
for grabberNumber in range(10): # Create 10 Grabber instances
grabber = Grabber()
grabber.loadFinished.connect(self.mapper.map)
self.mapper.setMapping(grabber, grabberNumber)
grabber.loadFinished.emit(True) # Initialize the grabber by emitting loadFinished
def on_mapper_mapped(self, gNumber):
self.count += 1
if self.count < len(self.params):
gParam = self.params[self.count]
grabber = self.mapper.mapping(gNumber)
#grabber.load(QUrl(self.url.format(gParam)))
# Next 2 lines for testing purposes, remove & uncomment the previous line
print "GRABBER:", gNumber, "PARAMETER:", gParam
QTimer.singleShot(1, lambda:grabber.loadFinished.emit(True))
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
main = bookie()