model view controller - Cannot close Dialog on Python PyQt4 -


my program has mainwindow contains inventory system. have added dialog window pop-ups when clicked "add item". able open dialog window can't seem close it.

when user tries close dialog window, display messagebox asking if user wants close window. currently, i'm using self.close(). closes messagebox i've made prevent accidental exit , doesn't close dialog window unless end using ide or task manager.

here's code snippets:

main.py

class main(qtgui.qmainwindow):     def __init__(self):         qtgui.qmainwindow.__init__(self)          self.db = database()         self.model = model(self)         self.ui = mainwindow_ui()         self.ui.setupui(self)         self.window = ui_dialog()          self.ui.additem.clicked.connect(lambda : self.start_form())      def start_form(self):         window = qtgui.qdialog()         self.window.setupui(window)         self.window.show()  def main():     app = qtgui.qapplication(sys.argv)     window = main()     window.showmaximized()     sys.exit(app.exec_())  if __name__ == "__main__":     main() 

additem.py (contains dialog window code)

def getnumber():     conn = sqlite3.connect('inventory.db')     c = conn.cursor()     c.execute('select seq sqlite_sequence')     itemnumber = c.fetchone()[0]     return int(itemnumber) + 1  class ui_dialog(qtgui.qdialog):     def __init__(self):         qtgui.qdialog.__init__(self)         self.setupui(self)      def setupui(self, dialog):         dialog.setobjectname(_fromutf8("dialog"))         dialog.resize(413, 382)          self.buttonbox = qtgui.qdialogbuttonbox(dialog)         self.buttonbox.setstandardbuttons(             qtgui.qdialogbuttonbox.cancel | qtgui.qdialogbuttonbox.ok | qtgui.qdialogbuttonbox.reset)         self.buttonbox.accepted.connect(self.accept)         self.buttonbox.rejected.connect(self.reject)      def retranslateui(self, dialog):             self.itemcode.settext(str(getnumber()))      def accept(self):         row = self.mapper.currentindex()         self.mapper.submit()         self.main.model.insertrow(row)         self.mapper.setcurrentindex(row)          self.close()      def reject(self):         ret = qtgui.qmessagebox.question(none, 'close request', 'are sure want quit?',                                          qtgui.qmessagebox.yes | qtgui.qmessagebox.no)         if ret == qtgui.qmessagebox.yes:             self.close()         else:             pass 

your accept() , reject() methods create infinite loop, because calling close() will, in turn, call methods again. when overriding virtual methods, should call base-class implementation using super:

class ui_dialog(qtgui.qdialog):     ...      def accept(self):         ...         super(ui_dialog, self).accept()        def reject(self):         ...         if ret == qtgui.qmessagebox.yes:             super(ui_dialog, self).reject() 

Comments

Popular posts from this blog

angular - Ionic slides - dynamically add slides before and after -

minify - Minimizing css files -

Add a dynamic header in angular 2 http provider -