PyQt's QMainWindow closeEvent is never called
The closeEvent
is a method of QMainwindow
, but you're trying to use it from your own Ui_MainWindow
class. Try this instead:
from PyQt4 import QtCore, QtGui
class MainWindow(QtGui.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setupUi()
def setupUi(self):
self.setObjectName("MainWindow")
self.resize(277, 244)
self.statusbar = QtGui.QStatusBar()
self.statusbar.setObjectName("statusbar")
self.setStatusBar(self.statusbar)
def closeEvent(self,event):
result = QtGui.QMessageBox.question(self,
"Confirm Exit...",
"Are you sure you want to exit ?",
QtGui.QMessageBox.Yes| QtGui.QMessageBox.No)
event.ignore()
if result == QtGui.QMessageBox.Yes:
event.accept()
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
If you want to keep as much of your structure as possible, try this:
from PyQt4 import QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(277, 244)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
MainWindow.show()
class MyWindow(QtGui.QMainWindow):
def closeEvent(self,event):
result = QtGui.QMessageBox.question(self,
"Confirm Exit...",
"Are you sure you want to exit ?",
QtGui.QMessageBox.Yes| QtGui.QMessageBox.No)
event.ignore()
if result == QtGui.QMessageBox.Yes:
event.accept()
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = MyWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
sys.exit(app.exec_())
Related videos on Youtube
Zeb
Full-Stack Developer enthusiastic and passionate about coding. I am a self motivated person, love to write codes professionally. My main area of interests are Java and Angular. I have extensive experience in designing and building highly scalable and stable Web applications from scratch by implementing REST APIs. Backend Languages & Frameworks Java Python Springboot Spring Cloud Groovy on Grails Frontend Languages And Frameworks Angular AngularJS TypeScript JavaScript Bootstrap HTML CSS Bootstrap DataBase MySQL JMS/Queue Servers RabbitMQ DevOps Docker Continuous Integration/Continuous delivery (CI/CD) Gitlab Kubernetes Version Control Git Methodologies Agile ( SCRUM Model)
Updated on October 09, 2022Comments
-
Zeb over 1 year
I'm using pyqt4 in python.
When I close the QMainWindow window , its not handled bycloseEvent
method. Please someone tell me what is wrong with this code:from PyQt4 import QtCore, QtGui class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(277, 244) self.centralwidget = QtGui.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QtGui.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) QtCore.QMetaObject.connectSlotsByName(MainWindow) def closeEvent(self,event): result = QtGui.QMessageBox.question(self, "Confirm Exit...", "Are you sure you want to exit ?", QtGui.QMessageBox.Yes| QtGui.QMessageBox.No) event.ignore() if result == QtGui.QMessageBox.Yes: event.accept() if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) MainWindow = QtGui.QMainWindow() ui = Ui_MainWindow()