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
Post a Comment