# wx.FileDialogCustomizeHook¶

Base class for customization hooks used with wx.FileDialog.

wx.FileDialogCustomizeHook is an abstract base class, i.e. in order to use a concrete class inheriting from it and implementing its pure virtual AddCustomControls function must be defined. Then an object of this class should be passed to wx.FileDialog.SetCustomizeHook , which will result in its AddCustomControls being called before the dialog is shown, UpdateCustomControls being called whenever something changes in the dialog while it is shown and, finally, TransferDataFromCustomControls being called when the user accepts their choice in the dialog.

Putting all this together, here is an example of customizing the file dialog using this class:

class EncryptHook(wx.FileDialogCustomizeHook):

def __init__(self):
super().__init__()
self.encrypt = False

# Override to add custom controls using the provided customizer object.

# Suppose we can encrypt files when saving them.

# While self.checkbox is not really a wx.CheckBox, it looks almost like one
# and, in particular, we can bind to custom control events as usual.
self.checkbox.Bind(wx.EVT_CHECKBOX, self.OnCheckbox)

# The encryption parameters can be edited in a dedicated dialog.
self.button.Bind(wx.EVT_BUTTON, self.OnButton)

def OnCheckbox(self, event):
self.button.Enable(event.IsChecked())

def OnButton(self, event):
... show the encryption parameters dialog here ...

# Override this to save the values of the custom controls.
def TransferDataFromCustomControls(self):
# Save the checkbox value, as we won't be able to use it any more
# once this function returns.
self.encrypt = self.checkbox.GetValue()

...

def SomeOtherEventHandlerFunc(self, event):

dialog = wx.FileDialog(None, "Save document", "", "file.my",
"My files (*.my)|*.my", wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)

# This object may be destroyed before the dialog, but must remain alive
# until ShowModal() returns. So you should hold a separate reference to
# it.
customizeHook = EncryptHook()
dialog.SetCustomizeHook(customizeHook)

if dialog.ShowModal() == wx.ID_OK:
if (customizeHook.encrypt)
... save with encryption ...
else:
... save without encryption ...

dialog.Destroy()


New in version 4.1/wxWidgets-3.1.7.

wx.FileDialog

## Class Hierarchy¶

Inheritance diagram for class FileDialogCustomizeHook:

## Methods Summary¶

 AddCustomControls Must be overridden to add custom controls to the dialog using the provided customizer object. TransferDataFromCustomControls Should typically be overridden to save the values of the custom controls when the dialog is accepted. UpdateCustomControls May be overridden to update the custom controls whenever something changes in the dialog.

## Class API¶

class wx.FileDialogCustomizeHook(object)

Base class for customization hooks used with FileDialog.

### Methods¶

AddCustomControls(self, customizer)

Must be overridden to add custom controls to the dialog using the provided customizer object.

Call wx.FileDialogCustomize functions to add controls and possibly bind to their events.

Note that there is no possibility to define the custom controls layout, they will appear more or less consecutively, but the exact layout is determined by the current platform.

Parameters

customizer (wx.FileDialogCustomize) –

TransferDataFromCustomControls(self)

Should typically be overridden to save the values of the custom controls when the dialog is accepted.

Custom controls are destroyed and cannot be used any longer once wx.FileDialog.ShowModal returns, so their values must be retrieved in this function, which is called just before this happens.

This function is not called if the user cancels the dialog.

Base class version does nothing.

UpdateCustomControls(self)

May be overridden to update the custom controls whenever something changes in the dialog.

This function is called when the user selects a file, changes the directory or changes the current filter in the dialog, for example. It can be used to update the custom controls state depending on the currently selected file, for example.

Note that it is not necessarily called when the value of a custom control changes.

Base class version does nothing.