Корректна ли моя передача объектов в qt слот?

При открытии второго окна я совершаю манипуляции с определенным виджетом(динамически создаваемым, что важно), и с ним же мне нужно совершить другие манипуляции после закрытия второго окна. Я реализовал это передав объект виджета в класс второго окна и возвратив его при закрытии сигналом. Я всё ещё плыву в фундаментальных принципах работы объектов в программировании, так что хочу узнать, корректен ли такой метод и могут ли всплыть какие-нибудь неожиданные нюансы?

Пример моей реализации:

from PyQt5 import QtWidgets
import sys

from PyQt5.QtCore import pyqtSignal, QObject


class SecondWindow(QtWidgets.QWidget):
    close_signal = pyqtSignal(QObject)

    def __init__(self, textbrowser):
        self.textbrowser = textbrowser
        super(SecondWindow, self).__init__()
        self.setWindowTitle('Second')
        self.button = QtWidgets.QPushButton('Close', self)
        self.button.clicked.connect(self.close_foo)

    def close_foo(self):
        self.close_signal.emit(self.textbrowser)
        self.close()


class Window(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()
        self.resize(300, 300)
        box = QtWidgets.QVBoxLayout(self)
        textbrowser = QtWidgets.QTextBrowser()
        textbrowser.setReadOnly(False)
        self.button = QtWidgets.QPushButton('Open')
        self.button.clicked.connect(lambda sw, v=textbrowser: self.second_window(v))
        box.addWidget(textbrowser)
        box.addWidget(self.button)

    def second_window(self, textbrowser):
        textbrowser.setStyleSheet('background-color: grey;')
        textbrowser.setReadOnly(True)
        self.second_window = SecondWindow(textbrowser)
        self.second_window.show()
        self.second_window.close_signal.connect(self.foo)

    def foo(self, textbrowser):
        textbrowser.setStyleSheet('background-color: white;')
        textbrowser.setReadOnly(False)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = Window()
    w.show()
    app.exec_()


Ответы (0 шт):