PyQt5 window.close () не закрывает окно, но window.open () работает нормально - PullRequest
0 голосов
/ 01 июня 2019

Я использую PyQt5 QWebEngineView, чтобы показать веб-сайт в окне, который поддерживает основные функции, такие как открытие нового окна. Мой код прекрасно работает для window.open (), но для функции window.close () на веб-странице он удаляет ссылку на окно, но окно физически присутствует, если пользователь не закрывает окно вручную.

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.load(QUrl("https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_close"))
        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)




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

Когда пользователь нажимает на кнопку с функцией window.close (), окно все еще там, но связано со стеком (я знаю, это потому, что страница не работает)

...