2016-07-22 54 views
0

我想在Python中做一个简单的幻灯片来查看0.html,1.html和2.html与他们之间3秒的延迟。幻灯片的网页(python)

下面的脚本显示0.html在3秒内,然后我得到一个“分段错误(核心转储)”的错误。有任何想法吗?

我迄今为止代码:

#!/usr/bin/python 
import sys 

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


class Window(QWidget): 

    def __init__(self, url, dur): 
     super(Window, self).__init__() 
     view = QWebView(self) 
     layout = QVBoxLayout(self) 
     layout.setContentsMargins(0, 0, 0, 0) 
     layout.addWidget(view) 

     html = urllib.urlopen(url).read()  
     view.setHtml(html) 
     QTimer.singleShot(dur * 1000, self.close) 


def playWidget(url, dur): 
     app = QApplication(sys.argv) 
     window = Window(url, dur) 
     window.showFullScreen() 
     app.exec_() 

x = 0 
while (x < 3): 
    page = "%s.html" % x 
    playWidget(page , 3) 
    x = x + 1 

回答

0

不能创建多个QApplication,这就是为什么你的榜样转储核心。但无论如何,如果您的程序需要创建一个全新的浏览器窗口来显示每个页面,那么这是一个相当糟糕的设计。你应该做的是将每个新页面加载到同一个浏览器中。

这是你的脚本重新写,做的是:

#!/usr/bin/python 
import sys 

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


class Window(QWidget): 
    def __init__(self, urls, dur): 
     super(Window, self).__init__() 
     self.urls = urls 
     self.duration = dur * 1000 
     self.view = QWebView(self) 
     layout = QVBoxLayout(self) 
     layout.setContentsMargins(0, 0, 0, 0) 
     layout.addWidget(self.view) 
     self.nextUrl() 

    def nextUrl(self): 
     if self.urls: 
      url = self.urls.pop(0) 
      html = urllib.urlopen(url).read() 
      self.view.setHtml(html) 
      QTimer.singleShot(self.duration, self.nextUrl) 
     else: 
      self.close() 

def playWidget(urls, dur): 
    app = QApplication(sys.argv) 
    window = Window(urls, dur) 
    window.showFullScreen() 
    app.exec_() 

urls = [ 
    'https://tools.ietf.org/html/rfc20', 
    'https://tools.ietf.org/html/rfc768', 
    'https://tools.ietf.org/html/rfc791', 
    ] 

playWidget(urls, 3)