2013-05-01 6 views
1

QWebView (python 3.3 + pydide 1.1.2 + Qt 4.8)을 FileViewer로 사용합니다. 그림, 텍스트, HTML, ... 모두 괜찮지 만 PDF에 디스플레이 문제가 있습니다. 나는 두 가지 방법을 시험했다.QWebView가 포함 된 PDF :로드 후 새로 고침/다시 그리기가 없음

  1. 내부 PDF 뷰어 : 화면이 비어 사용이로드 webview.load(file)하지만 후, 다른 파일을로드 한 후, 모두가 잘 작동 그것은 파일
  2. pdf.js 보여줍니다 filebase에 사용 setContent() 후를, 그것 흰색 페이지와 로딩 서클 webviewer.html/.js를로드합니다. 화면은 내가 폼의 크기를 조정하면 새로 고치거나 스크롤 막대를 사용하지만, 이 모든 괜찮

나는 "완성 된 자바 스크립트 로딩 플러그인 /"에 대한 이벤트를 찾을 수 없습니다, 그래서 다시 그리기를 강제 할 수 또는 그래서. 케이스 1 여기서 예 번호 :

import sys 
from PySide import QtCore, QtGui, QtWebKit #@UnusedWildImport 

class DialogTest(QtGui.QDialog): 
    def __init__(self, parent = None): 
     super(DialogTest, self).__init__(parent) 
     self.resize(620, 600) 
     self.setAttribute(QtCore.Qt.WA_DeleteOnClose) 

     self.PreviewBox = QtWebKit.QWebView() 
     self.PreviewBox.settings().setAttribute(QtWebKit.QWebSettings.PluginsEnabled, True) 
     self.PreviewBox.settings().setAttribute(QtWebKit.QWebSettings.WebAttribute.DeveloperExtrasEnabled, True) 
     self.PreviewBox.settings().setAttribute(QtWebKit.QWebSettings.PrivateBrowsingEnabled, True) 
     self.PreviewBox.settings().setAttribute(QtWebKit.QWebSettings.LocalContentCanAccessRemoteUrls, True) 
     self.PreviewBox.loadFinished.connect(self._loadfinished) 
     self.button_test1 = QtGui.QPushButton("File 1") 
     self.button_test1.clicked.connect(self._onselect1) 
     self.button_test2 = QtGui.QPushButton("File 2") 
     self.button_test2.clicked.connect(self._onselect2) 
     layout_Buttons = QtGui.QHBoxLayout()   
     layout_Buttons.addWidget(self.button_test1)   
     #layout_Buttons.addStretch() 
     layout_Buttons.addWidget(self.button_test2) 
     layout_Main = QtGui.QVBoxLayout()  
     layout_Main.addLayout(layout_Buttons) 
     layout_Main.addWidget(self.PreviewBox)     
     self.setLayout(layout_Main)  
    def Execute(self): 
     self.show() 
     self.exec_() 
    def _onselect1(self): 
     self.PreviewBox.load(QtCore.QUrl().fromLocalFile("c:\\tmp\\test1.pdf")) 
    def _onselect2(self): 
     self.PreviewBox.load(QtCore.QUrl().fromLocalFile("c:\\tmp\\test2.pdf")) 
    def _loadfinished(self, ok): 
     #self.PreviewBox.repaint() 
     pass 
app = QtGui.QApplication(sys.argv) 
DialogTest().Execute() 

편집 : 해결 케이스 1 (웹킷 플러그인) 그 자체에 집중 걸리므 용액 한테 허용되지 않는, otherbug있다. 나는 다시 pdf.js와 함께 연주하고 workaroud을 발견 :

self.PreviewBox.setHtml(content, baseUrl = QtCore.QUrl().fromLocalFile(path)) 
    self.PreviewBox.hide() 
    QtCore.QTimer.singleShot(700, self.PreviewBox.show) 

컨텐츠 작성 및 타이머가 너무 낮게하지 않은 후 hide()가 있어야합니다.

// 제이

답변

1

난 그냥 모든 PDF로드하기 전에 QWebView 청소 비슷한 문제를 해결했다. loadFinished() 신호에주의하십시오.

self.PreviewBox.setHtml('<html><head></head><title></title><body></body></html>') 
이 좀 더 휴대용 해결책이 될 수 있습니다 : 우리는 '빈에 대해'좋아하지 않는 경우에

self.PreviewBox.load(QUrl('about:blank')) 

또는 :

당신의 예에서