В этом случае для предотвращения продолжения синхронного выполнения вы можете использовать QEventLoop, а для уведомления, если окно закрыто, вы можете реализовать сигнал, который излучается в closeEvent:
from PySide import QtCore, QtGui
class Window_A(QtGui.QWidget):
closed = QtCore.Signal()
def __init__(self):
super(Window_A, self).__init__()
layout = QtGui.QVBoxLayout(self)
self.resize(300, 50)
self.button_A = QtGui.QPushButton("PRESS")
self.button_A.clicked.connect(self.func)
self.button_A.clicked.connect(self.close)
layout.addWidget(self.button_A)
@QtCore.Slot()
def func(self):
print("A")
def closeEvent(self, event):
super(Window_A, self).closeEvent(event)
self.closed.emit()
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
print("BEFORE")
widget = Window_A()
widget.show()
loop = QtCore.QEventLoop()
widget.closed.connect(loop.quit)
loop.exec_()
print("AFTER")