1
2 import pprint
3 from twisted.internet import gtk2reactor
4 gtk2reactor.install()
5 import gtk
6 from twisted.internet import reactor
7 from twisted.internet import defer
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
25 - def __init__(self, deferred, title="Save...", folder=None, default_file_name=None):
26 self.deferredResult = deferred
27 parent = None
28 filechooser = gtk.FileChooserDialog(
29 title,
30 parent,
31 gtk.FILE_CHOOSER_ACTION_SAVE,
32 (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
33 gtk.STOCK_SAVE, gtk.RESPONSE_OK))
34 if default_file_name is not None:
35 filechooser.set_current_name(default_file_name)
36 filechooser.set_default_response(gtk.RESPONSE_OK)
37 if folder is not None:
38 filechooser.set_current_folder(folder)
39
40 filechooser.connect("close", self.on_close)
41 filechooser.connect("response", self.on_response)
42 filechooser.show()
43
45 print("on_close %s %s" % (dialog, params))
46
48
49 if response_id == gtk.RESPONSE_DELETE_EVENT:
50 print("Deleted")
51 elif response_id == gtk.RESPONSE_CANCEL:
52 print("Cancelled")
53 self.terminate(dialog, None)
54 elif response_id == gtk.RESPONSE_OK:
55 print("Accepted")
56 file_name = dialog.get_filename()
57 self.terminate(dialog, file_name)
58
60 dialog.destroy()
61 self.deferredResult.callback(file_name)
62
64 def _on_result(result):
65 print(result)
66 deferred = defer.Deferred()
67 deferred.addCallback(_on_result)
68 Save(deferred)
69 return deferred
70
72 def _later():
73 def _cb(result):
74 reactor.stop()
75 deferred = non_blocking_save_dialog()
76 deferred.addCallback(_cb)
77 reactor.callLater(0.1, _later)
78 reactor.run()
79
80 if __name__ == "__main__":
81 non_blocking()
82