Многократное окно открывается при нажатии на ссылку с PDF-файлом - PullRequest
0 голосов
/ 31 мая 2019

при нажатии на URL с файлом PDF в нем мой браузер открыл несколько окон. Хотя должно быть открыто одно новое окно.Ниже приведен код, который может объяснить проблему более четко.

import sys

from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
from PyQt5.QtCore import QUrl

from PyQt5.QtWidgets import QApplication


class MyWindow(QtWebEngineWidgets.QWebEngineView):

    currentFile = ''

    def __init__(self,windows, parent=None):
        super(MyWindow, self).__init__()

        self._windows = windows
        self._windows.append(self)
        self.page().profile().downloadRequested.connect(self._downloadRequested)


        self.load(QUrl.fromUserInput("file:///C:/Users/TCI/Desktop/Aditya/test/default.html"))
        # self.load(QUrl("https://www.gmail.com"))
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)  
        self.show()

    def createWindow(self, windows):
        print(windows)
        if windows == QtWebEngineWidgets.QWebEnginePage.WebBrowserTab:
            webView = MyWindow(self._windows)
            webView.resize(900, 780) # <----
            return webView

        elif windows == QtWebEngineWidgets.QWebEnginePage.WebDialog:
            webView = MyWindow(self._windows)
            webView.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)           
            webView.resize(900, 780) # <----

            webView.show()          
            return webView

        elif windows == QtWebEngineWidgets.QWebEnginePage.acceptNavigationRequest:
            webView = MyWindow(self._windows)
            webView.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)           
            webView.resize(900, 780) # <----
            webView.show()          
            return webView
        return super(MyWindow, self).createWindow(windows)

    def on_download_finish(self):
        #If downloaded file is PDF then handle it accordingly
        if str(self.currentFile).split('.')[-1] == 'pdf':
            self.w = SecondWindow(self.currentFile)
            self.w.show()

    def _downloadRequested(self, item): # QWebEngineDownloadItem
        self.currentFile = str(item.path()).replace('\\', '/')
        item.accept()
        item.finished.connect(self.on_download_finish)


class SecondWindow(QtWebEngineWidgets.QWebEngineView):
    def __init__(self,currentFile):
        super(SecondWindow, self).__init__()
        print('Handle PDF file')
        #Code to handle PDF File




if __name__ == "__main__":
    app = QApplication(sys.argv)
    windows = []
    main = MyWindow(windows)  
    sys.exit(app.exec_())

Ниже приведена HTML-страница с URL-ссылкой, которая снова перенаправляет ее в файл PDF

<html>
    <head>
        <title>URL Error</title>
    </head>
    <body>
        <center style="padding-top:100px">
            <h2>Invaid URL</h2>
            <p>No URL passed in argument!</p>

        </center>
        <a href="#" onclick="javascript:window.open('https://www3.nd.edu/~rwilliam/stats1/x13.pdf','zajaz','resizable=yes,status=no,location=no,menubar=no,scrollbars=yes')" class="btn btn-freight-dash btn-top"><span class="glyphicon glyphicon-book btn-top"></span>Manual</a>
    </body>
</html>

вышекод работает хорошо.Но открывается несколько окон.

...