From: <bra...@om...> - 2005-05-22 20:22:03
|
When a window closes, I want to prompted the user to save changes if needed. The script below seems to work fine for that, except for one glitch: if the user edits a field, then clicks the closebox on the window, an on_closefield never gets sent. I'd like to send a closefield event to the widget that has the focus (if it's a field). I've tried using self.components.getFocus, among other things...there must be something obvious I'm missing. Thanks! def on_close (self, event): print 'caught a close window' if hasattr (self, 'entity'): if len (self.entity.newData) > 0: result = self.warningUnsavedChanges() if result.accepted: if result.returnedString == 'No': print "Don't save changes; close window" self.revert() self.visible = False else: #save changes try: self.save() self.visible = False except Exception, thisErr: errMsg = str(thisErr) self.warningGeneral ('Problem saving changes: ' + errMsg) else: pass #do nothing; do not close window else: #nothing to save self.visible = False else: print "this must not be a window with a DbEntity; nothing to save" event.skip() |
From: Bernie H. <ber...@ut...> - 2005-05-22 20:32:16
|
Hi Brad,=20 All windows have an OnClose() method: It derails any closing event =AD so be sure to have a self.Destroy a the end = =AD in the middle just stick in what you want. Try this: def OnClose(self, event): dlg =3D wxMessageDialog(self, "Would you like to save before you close?", "Hmmm....", wxYES_NO) if (dlg.ShowModal() =3D=3D wxID_YES): self.doSave(event) self.Destroy() BERNiE Bernie Hogan PhD Student Department of Sociology NetLab, Knowledge Media Design Institute University of Toronto I received a message from bra...@om... at approximately 5/22/05 4:21 PM. Above is my reply. >=20 > When a window closes, I want to prompted the user to save changes if need= ed. > The script=20 > below seems to work fine for that, except for one glitch: if the user edi= ts a > field, then clicks > the closebox on the window, an on_closefield never gets sent. I'd like to= send > a closefield=20 > event to the widget that has the focus (if it's a field). I've tried usin= g > self.components.getFocus, > among other things...there must be something obvious I'm missing. >=20 > Thanks! >=20 >=20 > def on_close (self, event): > print 'caught a close window' > if hasattr (self, 'entity'): > if len (self.entity.newData) > 0: > result =3D self.warningUnsavedChanges() > if result.accepted: > if result.returnedString =3D=3D 'No': > print "Don't save changes; c= lose > window"=20 > self.revert() > self.visible =3D False > else: > #save changes > try: > self.save() > self.visible =3D False > except Exception, thisErr: > errMsg =3D str(thisErr= ) > self.warningGeneral > ('Problem saving changes: ' + errMsg) > else: > pass #do nothing; do not close wind= ow > else: > #nothing to save > self.visible =3D False > else: > print "this must not be a window with a DbEntity; > nothing to save"=20 > event.skip() > =20 --=20 |
From: <bra...@om...> - 2005-05-22 21:19:28
|
VGhhbmtzIGZvciB0aGUgaW5mbywgQmVybmllLiBIb3dldmVyLCBJIHN0aWxsIGhhdmVuJ3QgYmVl biBhYmxlIHRvIGZpeCBteSANCmJ1Zy4NCg0KIEkgdHJpZWQgT25DbG9zZS4gIEl0IGFwcGVhcnMg dGhhdCBPbkNsb3NlIGdldHMgc2VudCBhZnRlciBvbl9jbG9zZS4NCiBJIHB1dCBhbiBldmVudC5z a2lwKCkgYW5kIGEgcHJpbnQgc3RhdGVtZW50IGludG8gdGhvc2UgaGFuZGxlcnMgdG8NCmZpbmQg b3V0IHRoZSBvcmRlciBvZiBldmVudHMuDQoNCmNhdWdodCBvbl9jbG9zZQ0KY2F1Z2h0IE9uQ2xv c2UNCmNhdWdodCBvbl9jbG9zZUZpZWxkOg0KDQpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgSSBu ZWVkIHRvIGNhdGNoIHRoZSBvbl9jbG9zZUZpZWxkIGJlZm9yZSB0aGUNCk9uQ2xvc2UgZ29lcyBv ZmYuIEl0IHdvdWxkIGJlIG5pY2UgaWYgUHl0aG9uQ2FyZCBwYXNzZWQgdGhlIGV2ZW50cyBpbg0K dGhhdCBvcmRlciAoY2xlYW4gdXAgYmVmb3JlIHRoZSBjbG9zZSB3aW5kb3cgaGFwcGVucyksIGJ1 dCBmYWlsaW5nIHRoYXQNCkknbSBsb29raW5nIGZvciBhIHdheSB0byBkZXRlY3Qgd2hpY2ggZmll bGQgaGFkIHRoZSBmb2N1cyBkdXJpbmcgb25fY2xvc2UsDQphbmQgc29tZWhvdyBnZW5lcmF0ZSB0 aGUgb25fY2xvc2VGaWVsZCBldmVudCBvbiBiZWhhbGYgb2YgdGhhdA0KcGFydGljdWxhciBmaWVs ZCB3aWRnZXQuDQoNClRoYW5rcyENCg0KDQoNCkJlcm5pZSBIb2dhbiA8YmVybmllLmhvZ2FuQHV0 b3JvbnRvLmNhPiB3cm90ZSBvbiAwNS8yMi8yMDA1IDAzOjMyOjAwIFBNOg0KDQo+IEhpIEJyYWQs IA0KPiANCj4gQWxsIHdpbmRvd3MgaGF2ZSBhbiBPbkNsb3NlKCkgbWV0aG9kOg0KPiANCj4gSXQg ZGVyYWlscyBhbnkgY2xvc2luZyBldmVudCDigJMgc28gYmUgc3VyZSB0byBoYXZlIGEgc2VsZi5E ZXN0cm95IGEgDQo+IHRoZSBlbmQg4oCTIGluIHRoZSBtaWRkbGUganVzdCBzdGljayBpbiB3aGF0 IHlvdSB3YW50LiANCj4gDQo+IFRyeSB0aGlzOg0KPiAgICAgZGVmIE9uQ2xvc2Uoc2VsZiwgZXZl bnQpOg0KPiAgICAgICAgIGRsZyA9IHd4TWVzc2FnZURpYWxvZyhzZWxmLCAiV291bGQgeW91IGxp a2UgdG8gc2F2ZSBiZWZvcmUgDQo+IHlvdSBjbG9zZT8iLCAiSG1tbS4uLi4iLCB3eFlFU19OTykN Cj4gICAgICAgICBpZiAoZGxnLlNob3dNb2RhbCgpID09IHd4SURfWUVTKToNCj4gICAgICAgICAg ICAgc2VsZi5kb1NhdmUoZXZlbnQpDQo+ICAgICAgICAgc2VsZi5EZXN0cm95KCkNCj4gDQo+IEJF Uk5pRQ0KPiANCj4gQmVybmllIEhvZ2FuDQo+IFBoRCBTdHVkZW50DQo+IERlcGFydG1lbnQgb2Yg U29jaW9sb2d5DQo+IE5ldExhYiwgS25vd2xlZGdlIE1lZGlhIERlc2lnbiBJbnN0aXR1dGUNCj4g VW5pdmVyc2l0eSBvZiBUb3JvbnRvDQo+IA0KPiBJIHJlY2VpdmVkIGEgbWVzc2FnZSBmcm9tIGJy YWQuYWxsZW5Ab21zZGFsLmNvbSBhdCBhcHByb3hpbWF0ZWx5IA0KPiA1LzIyLzA1IDQ6MjEgUE0u IEFib3ZlIGlzIG15IHJlcGx5Lg0KDQo+IA0KPiBXaGVuIGEgd2luZG93IGNsb3NlcywgSSB3YW50 IHRvIHByb21wdGVkIHRoZSB1c2VyIHRvIHNhdmUgY2hhbmdlcyBpZg0KPiBuZWVkZWQuIFRoZSBz Y3JpcHQgDQo+IGJlbG93IHNlZW1zIHRvIHdvcmsgZmluZSBmb3IgdGhhdCwgZXhjZXB0IGZvciBv bmUgZ2xpdGNoOiBpZiB0aGUgDQo+IHVzZXIgZWRpdHMgYSBmaWVsZCwgdGhlbiBjbGlja3MgDQo+ IHRoZSBjbG9zZWJveCBvbiB0aGUgd2luZG93LCBhbiBvbl9jbG9zZWZpZWxkIG5ldmVyIGdldHMg c2VudC4gSSdkIA0KPiBsaWtlIHRvIHNlbmQgYSBjbG9zZWZpZWxkIA0KPiBldmVudCB0byB0aGUg d2lkZ2V0IHRoYXQgaGFzIHRoZSBmb2N1cyAoaWYgaXQncyBhIGZpZWxkKS4gSSd2ZSB0cmllZA0K PiB1c2luZyBzZWxmLmNvbXBvbmVudHMuZ2V0Rm9jdXMsIA0KPiBhbW9uZyBvdGhlciB0aGluZ3Mu Li50aGVyZSBtdXN0IGJlIHNvbWV0aGluZyBvYnZpb3VzIEknbSBtaXNzaW5nLiANCj4gDQo+IFRo YW5rcyENCj4gDQo+IA0KPiAgICAgICAgIGRlZiBvbl9jbG9zZSAoc2VsZiwgZXZlbnQpOiANCj4g ICAgICAgICAgICAgICAgcHJpbnQgJ2NhdWdodCBhIGNsb3NlIHdpbmRvdycgDQo+ICAgICAgICAg ICAgICAgIGlmIGhhc2F0dHIgKHNlbGYsICdlbnRpdHknKTogDQo+ICAgICAgICAgICAgICAgICAg ICAgICAgaWYgbGVuIChzZWxmLmVudGl0eS5uZXdEYXRhKSA+IDA6IA0KPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLndhcm5pbmdVbnNhdmVkQ2hhbmdlcygpIA0K PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXN1bHQuYWNjZXB0ZWQ6IA0KPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlc3VsdC5yZXR1cm5lZFN0 cmluZyA9PSAnTm8nOiANCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnQgIkRvbid0IHNhdmUgDQo+IGNoYW5nZXM7IGNsb3NlIHdpbmRvdyIgDQo+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV2ZXJ0KCkg DQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudmlz aWJsZSA9IEZhbHNlIA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs c2U6IA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc2F2 ZSBjaGFuZ2VzIA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0cnk6IA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlbGYuc2F2ZSgpIA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNlbGYudmlzaWJsZSA9IA0KRmFsc2UgDQo+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIHRoaXNF cnI6IA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVyck1zZyA9IA0Kc3RyKHRoaXNFcnIpIA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuDQo+IHdhcm5pbmdHZW5lcmFsICgnUHJv YmxlbSBzYXZpbmcgY2hhbmdlczogJyArIGVyck1zZykgDQo+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVsc2U6IA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBhc3MgI2RvIG5vdGhpbmc7IGRvIG5vdCBjbG9zZSANCndpbmRvdyANCj4gICAgICAgICAgICAg ICAgICAgICAgICBlbHNlOiANCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI25vdGhp bmcgdG8gc2F2ZSANCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi52aXNpYmxl ID0gRmFsc2UgDQo+ICAgICAgICAgICAgICAgIGVsc2U6IA0KPiAgICAgICAgICAgICAgICAgICAg ICAgIHByaW50ICJ0aGlzIG11c3Qgbm90IGJlIGEgd2luZG93IHdpdGggYSANCj4gRGJFbnRpdHk7 IG5vdGhpbmcgdG8gc2F2ZSIgDQo+ICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc2tpcCgp IA0KPiANCj4gDQo+IA0KPiAtLSANCg0K |