Закрытие MainWindow из основного окна с перехватом события
Как закрыть MainWindow из основного окна чтобы это событие перехватывалось?
При текущем коде из менюбар и кнопкой 'x' все закрывается с перехватом. А из основного окна кнопкой btn закрывается только это окно. Если в btn использовать QtWidgets.qApp.quit то закрывается все приложение, но это событие не перехватывается.
Создавать отдельный closeEvent для основного окна с qApp.quit для закрытия MainWindow?
class MainWindow(QtWidgets.QMainWindow):
def __init__(self,parent=None):
QtWidgets.QMainWindow.__init__(self, parent)
self.win = MyWindow()
self.setCentralWidget(self.win)
menuBar = self.menuBar()
myMenu = menuBar.addMenu('&File')
action = myMenu.addAction('&Close', self.close)
def closeEvent(self, e):
print('Goodbye')
e.accept()
QtWidgets.QWidget.closeEvent(self, e)
class MyWindow(QtWidgets.QWidget):
def __init__(self,parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.makeWidget()
def makeWidget(self):
btn = QtWidgets.QPushButton('Close')
btn.clicked.connect(self.close)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
Ответы (2 шт):
Автор решения: Alexander Chernin
→ Ссылка
Если я правильно понял вашу проблему, то попробуйте так:
class MyWindow(QtWidgets.QWidget):
def __init__(self,parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.makeWidget()
def makeWidget(self):
self.btn = QtWidgets.QPushButton('Close') # не забудьте self
Тогда в главном окне надо добавить строку:
class MainWindow(QtWidgets.QMainWindow):
def __init__(self,parent=None):
QtWidgets.QMainWindow.__init__(self, parent)
self.win = MyWindow()
self.win.btn.connect(self.close) # На кнопку вешаем закрытие главного окна
...
Автор решения: S. Nick
→ Ссылка
Как вариант:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class MyWindow(QtWidgets.QWidget):
def __init__(self,parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.makeWidget()
def makeWidget(self):
btn = QtWidgets.QPushButton('Close')
btn.clicked.connect(self.window().close) # +++
layout = QtWidgets.QVBoxLayout(self) # +++
layout.addWidget(btn) # +++
class MainWindow(QtWidgets.QMainWindow):
def __init__(self,parent=None):
QtWidgets.QMainWindow.__init__(self, parent)
self.win = MyWindow(self) # + self
self.setCentralWidget(self.win)
menuBar = self.menuBar()
myMenu = menuBar.addMenu('&File')
action = myMenu.addAction('&Close', self.close)
def closeEvent(self, e):
print('Goodbye')
e.accept()
QtWidgets.QWidget.closeEvent(self, e)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
