PyQt:制作截图和QTimer

时间:2015-03-04 14:09:07

标签: python pyqt qtimer

这是一个初学者的问题所以我真的为此道歉(之前从未使用过Python,但必须尽快修改现有脚本)。

我尝试为许多网页制作屏幕截图。它一直很顺利,但我注意到即使链接不同,我有时会得到重复。似乎需要使用QTimer,而简单的超时解决方案是行不通的。我以前有过:

1)使用Screenshot方法的capture类将网页链接作为参数

2)Screenshot的一个实例,并在主要

中的网络链接列表上循环多次时调用capture(url)

现在我必须使用QTimer,我到目前为止看到的所有示例都将它放在__init__中,这就像

    self.timerScreen = QTimer()
    self.timerScreen.setInterval(1000)
    self.timerScreen.setSingleShot(True)
    self.timerScreen.timeout.connect(self.capture)
    self.loadFinished.connect(self.timerScreen.start)
    self.load(QUrl(url))

我必须在初始化时传递网址(def __init__(self, urlLst, parent=None)),这让我觉得我提前收集所有网址并制作一个屏幕截图实例,我也只会调用一次。因此,我应该在初始化块中循环遍历URL并在那里调用捕获。毋庸置疑,我显然未能做得好,capture甚至没有被召唤。 (我也尝试了一种替代方案 - 每个链接创建一个实例 - 但在那里也没有太大的成功)。关于如何解决它的任何想法?非常感谢你提前!

class Screenshot(QWebView):
   def __init__(self, urlLst, webidLst, parent=None):
    super(Screenshot, self).__init__(parent)
    self.timerScreen = QTimer()
    self.timerScreen.setInterval(1000)
    self.timerScreen.setSingleShot(True)
    for index, item in enumerate(urlLst):
        self.url = item
        self.webid = webidLst[index]
        self.output_file = self.webid + ".png"
        self.timerScreen.timeout.connect(self.capture)
        self.loadFinished.connect(self.timerScreen.start)
        self.load(QUrl(self.url))

  def capture(self):
    frame = self.page().mainFrame()
    self.page().setViewportSize(frame.contentsSize())
    # render image
    image = QImage(self.page().viewportSize(), QImage.Format_ARGB32)
    if image.isNull() is False:
        painter = QPainter(image)
        frame.render(painter)
        painter.end()
        print '\n for webid=' + str(self.webid) + '\t for web page=' + str(self.url)
        print ' saving ', self.output_file  
        image.save(self.output_file)

# In main:
# store all links in LinkLst and their ids in webpageidLst
app = QApplication(sys.argv)
s = Screenshot(linkLst, webpageidLst)
app.exec_()

0 个答案:

没有答案