python - PyQt4 AttributeError: 'Ui_MainWindow' object has no attribute 'filename' -


i'm writing gui text editor , want add message box confirm whether save changes or not. here sample code

from pyqt4 import qtcore, qtgui  try:     _fromutf8 = qtcore.qstring.fromutf8 except attributeerror:     def _fromutf8(s):     return s  try:     _encoding = qtgui.qapplication.unicodeutf8     def _translate(context, text, disambig):         return qtgui.qapplication.translate(context, text, disambig, _encoding) except attributeerror:     def _translate(context, text, disambig):         return qtgui.qapplication.translate(context, text, disambig)  class ui_mainwindow(object):     def setupui(self, mainwindow):         mainwindow.setobjectname(_fromutf8("mainwindow"))         mainwindow.resize(616, 554)         self.centralwidget = qtgui.qwidget(mainwindow)         self.centralwidget.setobjectname(_fromutf8("centralwidget"))         self.open_btn = qtgui.qpushbutton(self.centralwidget)         self.open_btn.setgeometry(qtcore.qrect(110, 300, 97, 31))         self.open_btn.setobjectname(_fromutf8("open_btn"))         self.close_btn = qtgui.qpushbutton(self.centralwidget)         self.close_btn.setgeometry(qtcore.qrect(330, 300, 97, 31))         self.close_btn.setobjectname(_fromutf8("close_btn"))         self.textedit = qtgui.qtextedit(self.centralwidget)         self.textedit.setgeometry(qtcore.qrect(110, 60, 311, 201))         self.textedit.setobjectname(_fromutf8("textedit"))         self.save_btn = qtgui.qpushbutton(self.centralwidget)         self.save_btn.setgeometry(qtcore.qrect(220, 300, 97, 31))         self.save_btn.setobjectname(_fromutf8("save_btn"))         mainwindow.setcentralwidget(self.centralwidget)         self.menubar = qtgui.qmenubar(mainwindow)         self.menubar.setgeometry(qtcore.qrect(0, 0, 616, 27))         self.menubar.setobjectname(_fromutf8("menubar"))         mainwindow.setmenubar(self.menubar)         self.statusbar = qtgui.qstatusbar(mainwindow)         self.statusbar.setobjectname(_fromutf8("statusbar"))         mainwindow.setstatusbar(self.statusbar)          self.retranslateui(mainwindow)         qtcore.qobject.connect(self.close_btn,     qtcore.signal(_fromutf8("clicked()")), mainwindow.close)         qtcore.qmetaobject.connectslotsbyname(mainwindow)      # text editor open slot added     qtcore.qobject.connect(self.open_btn,qtcore.signal("clicked()"), self.file_dialog)     qtcore.qobject.connect(self.save_btn,qtcore.signal("clicked()"), self.file_save)     qtcore.qobject.connect(self.textedit,qtcore.signal("textchanged()"), self.enable_save)     qtcore.qmetaobject.connectslotsbyname(mainwindow) # improved code open , cancle button         def file_dialog(self):     response = false     # buttons texts     save = 'save'     discard = 'discard'     cancel = 'cancel'     # if have changes ask them     if self.save_btn.isenabled() , self.filename:         message = qtgui.qmessagebox(self)         message.settext('what unsaved changes ?')         message.setwindowtitle('notepad')         message.seticon(qtgui.qmessagebox.question)         message.addbutton(save, qtgui.qmessagebox.acceptrole)         message.addbutton(discard, qtgui.qmessagebox.destructiverole)         message.addbutton(cancel, qtgui.qmessagebox.rejectrole)         message.setdetailedtext('unsaved changes in file: ' + str(self.filename))          message.exec_()         response = message.clickedbutton().text()         # save  file         if response == save:             self.file_save()             self.save_btn.setenabled(false)         # discard changes         elif response == discard:             self.save_btn.setenabled(false)     # if didn't cancelled show file dialogue     if response != cancel:         fd=qtgui.qfiledialog(none)         self.filename = fd.getopenfilename()         os.path import isfile         if isfile(self.filename):             import codecs             text = codecs.open(self.filename,'r','utf-8').read()             self.textedit.setplaintext(text)             self.save_btn.setenabled(false)       def enable_save(self):         self.save_btn.setenabled(true) #save btn     def file_save(self):         os.path import isfile         if isfile(self.filename):             import codecs             s = codecs.open(self.filename,'w','utf-8')             s.write(unicode(self.textedit.toplaintext()))             s.close()      def retranslateui(self, mainwindow):         mainwindow.setwindowtitle(_translate("mainwindow", "mainwindow", none))         self.open_btn.settext(_translate("mainwindow", "open", none))         self.close_btn.settext(_translate("mainwindow", "close", none))         self.save_btn.settext(_translate("mainwindow", "save", none))   if __name__ == "__main__":     import sys     app = qtgui.qapplication(sys.argv)     mainwindow = qtgui.qmainwindow()     ui = ui_mainwindow()     ui.setupui(mainwindow)     mainwindow.show()     sys.exit(app.exec_()) 

when trying run get

traceback (most recent call last):   file "texteditor.py", line 69, in file_dialog     if self.save_btn.isenabled() , self.filename: attributeerror: 'ui_mainwindow' object has no attribute 'filename' 

on line 69 have

if self.save_btn.isenabled() , self.filename:             message = qtgui.qmessagebox(self) 

any solution this? thank you

at point self.filename called on line 69, attribute has not been set.

if add line:

self.filename = '' 

... somewhere within setupui function, should resolve issue.


Comments