Can I do this with wx.FileDialog?
Dave Blosdale
Dave.Blosdale at autodesk.com
Mon Oct 16 14:40:39 PDT 2006
What I'm trying to accomplish:
I have a couple of different file types which may be saved from the
application.
When the user changes the "save as type:" popup field I'd like to be
able to
automatically change the extension of the string in the "filename:"
field to reflect
the filtering extension. wx.FileDialog has a number of methods which
seems useful for this.
However I'm having problems getting some kind of callback invoked when
the user
modifies the "save as type:" popup field.
e.g.
Save as dialog invoked users sees
filename: usersfile.a3s
Save As Type: field changed to ".zip"
After changing the save sas type, I'd like the user to see
filename: usersfile.zip
But currently it still says
filename: usersfile.a3s
Some approaches I've tried:
I tried using a Validator approach (see sample code below), thinking
I'd modify the field when the Validate() method gets invoked.
With that approach the __init__() and the Clone() method would get
invoked
but not the Validate(), TransferToWindow(), TransferFromWindow()
methods.
Although wx.FileDialog derives from wx.Window (which has the
SetValidator() method)
it doesn't seem to get invoked. From looking at examples and the
wxPython in Action book
is seems that only wx.Control (which also derives from wx.Window)
derived objects might actually make use of the validator.
I also tried deriving a subclass from wx.FileDialog (no sample code)
so that I could override some methods but they didn't get called
either.
And I've seen some posts which suggest that wouldn't work.
Suggestions on how this can be done? Or is this currently not
possible?
Or have I misunderstood the wx way of doing things?
---------Sample code below----------------
# SaveSceneDialog::saveFromDialog() pops up a dialog and prompting the
user
# for a filename to save to. Returns the filename, or None if the user
has
# cancelled.
#
class TestValidator(wx.PyValidator):
def __init__(self):
wx.PyValidator.__init__(self)
print "TestValidator.__init__ called"; import
sys; sys.stdout.flush()
def Clone(self):
print "Clone called"; import sys;
sys.stdout.flush()
return TestValidator()
def Validate(self, win):
print "Validate called"; import sys;
sys.stdout.flush()
return True
def TransferToWindow(self):
print "TransferToWindow called"; import sys;
sys.stdout.flush()
return True
def TransferFromWindow(self):
print "TransferFromWindow called"; import sys;
sys.stdout.flush()
return True
class SaveSceneDialog:
@staticmethod
def saveFromDialog(window, filenameHint):
if filenameHint:
filenameHint =
os.path.basename(filenameHint)
else:
filenameHint = ''
dlg = wx.FileDialog(window, _("Save Scene As"))
dlg.SetDirectory(GetOptionPrefsDirectory(kPrefsLastScenePath))
dlg.SetFilename(filenameHint)
dlg.SetStyle(wx.SAVE|wx.OVERWRITE_PROMPT)
dlg.SetWildcard("Application File
(*.a3s)|*.a3s|Compressed Archive (*.zip)|*.zip")
dlg.SetValidator(TestValidator())
filename = None
if dlg.ShowModal() == wx.ID_OK:
try:
OptionPrefs.instance().set(kPrefsLastScenePath, dlg.GetDirectory())
filename = dlg.GetPath()
print "SAVE AS
FILENAME", filename; import sys; sys.stdout.flush()
except:
filename = None
printException()
dlg.Destroy()
return filename
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.wxwidgets.org/pipermail/wxpython-users/attachments/20061016/4b74f7a6/attachment.htm
More information about the wxpython-users
mailing list