2016-07-22 4 views
0

私はPythonで0.html、1.html、2.htmlを3秒間の遅延で表示する簡単なスライドショーを作っています。Webページのスライドショー(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) 
関連する問題