From: Brendan S. (eTRIX) <bre...@et...> - 2017-11-07 11:22:51
|
On 7/11/17 6:07 am, Dietmar Schwertberger wrote: > Hi! > > Is anyone actually using "Extra properties for this widget"? > > I was just about to prepare a code example for how to use the > CustomWidget for adding classes that are not supported natively by > wxGlade. > > My example would be a matplotlib canvas. This requires some imports > and a bit of code before and after creation, as it requires an object > to be created and supplied as argument. The workaround would be to > derive a class and use this instead of the original matplotlib canvas. > That's possible, but not too nice. > > I'm completely missing a way to specify the code to be executed before > creation of an object. > > Also, for the code after creation, there's only the method to specify > extra properties. > E.g. property "maxLength" and value "10". > This is then magically converted to > self.my_custom_widget.SetMaxLength(10). > > Personally, I would prefer to have three fields: > * Extra import code (added on module level, just as now). > * Extra setup code (to be called right before the widget is > instantiated) > * Extra code (to be called right after the widget is instantiated) > > With this setup, I'm wondering whether the Extra properties make sense > any more. > > What do you think? Do you have real-world examples? Do you have any > preferences in favour or against such a change? > > In theory the Extra properties have the advantage that they are > language-neutral, but I have some doubts whether this has practical > relevance. I've used `CustomWidget` to implement a plot canvas from `wx.lib` I put the following in the Extra Code section for the widget instance. import my_custom_plot and specify the following as the Class (in Common tab). my_custom_plot.MyCustomPlot The custom widget class definition and constructor are: import wx from wx.lib import plot as wxplot class MyCustomPlot(wxplot.PlotCanvas): def __init__(self, *args, **kwds): #! these attributes are used in other methods when updating the graph, #! and can be specified by Extra Properties in wxglade, #! however I now use a `set_props()` method from the main app #! to set these properties (and others that may not be settable in the constructor) self.line_colour = kwds.pop('line_colour', "red") self.line_width = kwds.pop('line_width', 1) self.axes_colour = kwds.pop('axes_colour', "blue") wxplot.PlotCanvas.__init__(self, *args, **kwds) self.clear() |