def __init__(self, parent, controller, tagname):
"""
Constructor
@param parent: Parent wx.Window of dialog for modal
@param controller: Reference to project controller
@param tagname: Tagname of project POU edited
"""
BlockPreviewDialog.__init__(self, parent, controller, tagname,
title=_('Power Rail Properties'))
# Init common sizers
self._init_sizers(2, 0, 5, None, 2, 1)
# Create label for connection type
type_label = wx.StaticText(self, label=_('Type:'))
self.LeftGridSizer.AddWindow(type_label, flag=wx.GROW)
# Create radio buttons for selecting power rail type
self.TypeRadioButtons = {}
first = True
for type, label in [(LEFTRAIL, _('Left PowerRail')),
(RIGHTRAIL, _('Right PowerRail'))]:
radio_button = wx.RadioButton(self, label=label,
style=(wx.RB_GROUP if first else 0))
radio_button.SetValue(first)
self.Bind(wx.EVT_RADIOBUTTON, self.OnTypeChanged, radio_button)
self.LeftGridSizer.AddWindow(radio_button, flag=wx.GROW)
self.TypeRadioButtons[type] = radio_button
first = False
# Create label for power rail pin number
pin_number_label = wx.StaticText(self, label=_('Pin number:'))
self.LeftGridSizer.AddWindow(pin_number_label, flag=wx.GROW)
# Create spin control for defining power rail pin number
self.PinNumber = wx.SpinCtrl(self, min=1, max=50,
style=wx.SP_ARROW_KEYS)
self.PinNumber.SetValue(1)
self.Bind(wx.EVT_SPINCTRL, self.OnPinNumberChanged, self.PinNumber)
self.LeftGridSizer.AddWindow(self.PinNumber, flag=wx.GROW)
# Add preview panel and associated label to sizers
self.RightGridSizer.AddWindow(self.PreviewLabel, flag=wx.GROW)
self.RightGridSizer.AddWindow(self.Preview, flag=wx.GROW)
# Add buttons sizer to sizers
self.MainSizer.AddSizer(
self.ButtonSizer, border=20,
flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
self.Fit()
# Left Power Rail radio button is default control having keyboard focus
self.TypeRadioButtons[LEFTRAIL].SetFocus()
python类GROW的实例源码
def __init__(self, parent, datatypes, infos):
wx.Dialog.__init__(self, parent, title=_('Edit array type properties'))
main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=3, vgap=10)
main_sizer.AddGrowableCol(0)
main_sizer.AddGrowableRow(1)
top_sizer = wx.BoxSizer(wx.HORIZONTAL)
main_sizer.AddSizer(top_sizer, border=20,
flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
basetype_label = wx.StaticText(self, label=_('Base Type:'))
top_sizer.AddWindow(basetype_label, 1, flag=wx.ALIGN_BOTTOM)
self.BaseType = wx.ComboBox(self, style=wx.CB_READONLY)
top_sizer.AddWindow(self.BaseType, 1, flag=wx.GROW)
self.Dimensions = CustomEditableListBox(self, label=_("Dimensions:"),
style=(wx.gizmos.EL_ALLOW_NEW |
wx.gizmos.EL_ALLOW_EDIT |
wx.gizmos.EL_ALLOW_DELETE))
for func in ["_OnLabelEndEdit",
"_OnAddButton",
"_OnDelButton",
"_OnUpButton",
"_OnDownButton"]:
setattr(self.Dimensions, func, self.OnDimensionsChanged)
main_sizer.AddSizer(self.Dimensions, border=20,
flag=wx.GROW | wx.LEFT | wx.RIGHT)
button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton())
main_sizer.AddSizer(button_sizer, border=20,
flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
self.SetSizer(main_sizer)
for datatype in datatypes:
self.BaseType.Append(datatype)
if isinstance(infos, TupleType) and infos[0] == "array":
self.BaseType.SetStringSelection(infos[1])
self.Dimensions.SetStrings(map(lambda x: "..".join(x), infos[2]))
elif infos in datatypes:
self.BaseType.SetStringSelection(infos)
self.BaseType.SetFocus()
self.Fit()
def _init_sizers(self,
main_rows, main_growable_row,
left_rows, left_growable_row,
right_rows, right_growable_row):
"""
Initialize common sizers
@param main_rows: Number of rows in main sizer
@param main_growable_row: Row that is growable in main sizer, None if no
row is growable
@param left_rows: Number of rows in left grid sizer
@param left_growable_row: Row that is growable in left grid sizer, None
if no row is growable
@param right_rows: Number of rows in right grid sizer
@param right_growable_row: Row that is growable in right grid sizer,
None if no row is growable
"""
# Create dialog main sizer
self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0,
rows=main_rows, vgap=10)
self.MainSizer.AddGrowableCol(0)
if main_growable_row is not None:
self.MainSizer.AddGrowableRow(main_growable_row)
# Create a sizer for dividing parameters in two columns
self.ColumnSizer = wx.BoxSizer(wx.HORIZONTAL)
self.MainSizer.AddSizer(self.ColumnSizer, border=20,
flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
# Create a sizer for left column
self.LeftGridSizer = wx.FlexGridSizer(cols=1, hgap=0,
rows=left_rows, vgap=5)
self.LeftGridSizer.AddGrowableCol(0)
if left_growable_row is not None:
self.LeftGridSizer.AddGrowableRow(left_growable_row)
self.ColumnSizer.AddSizer(self.LeftGridSizer, 1, border=5,
flag=wx.GROW | wx.RIGHT | wx.EXPAND)
# Create a sizer for right column
self.RightGridSizer = wx.FlexGridSizer(cols=1, hgap=0,
rows=right_rows, vgap=0)
self.RightGridSizer.AddGrowableCol(0)
if right_growable_row is not None:
self.RightGridSizer.AddGrowableRow(right_growable_row)
self.ColumnSizer.AddSizer(self.RightGridSizer, 1, border=5,
flag=wx.GROW | wx.LEFT)
self.SetSizer(self.MainSizer)
def __init__(self, parent, pou_type=None, type_readonly=False):
wx.Dialog.__init__(self, id=-1, parent=parent,
name='PouDialog', title=_('Create a new POU'),
style=wx.DEFAULT_DIALOG_STYLE)
main_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
main_sizer.AddGrowableCol(0)
main_sizer.AddGrowableRow(0)
infos_sizer = wx.FlexGridSizer(cols=2, hgap=5, rows=3, vgap=15)
infos_sizer.AddGrowableCol(1)
main_sizer.AddSizer(infos_sizer, border=20,
flag=wx.GROW | wx.TOP | wx.LEFT | wx.RIGHT)
pouname_label = wx.StaticText(self, label=_('POU Name:'))
infos_sizer.AddWindow(pouname_label, border=4,
flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP)
self.PouName = wx.TextCtrl(self)
infos_sizer.AddWindow(self.PouName, flag=wx.GROW)
poutype_label = wx.StaticText(self, label=_('POU Type:'))
infos_sizer.AddWindow(poutype_label, border=4,
flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP)
self.PouType = wx.ComboBox(self, style=wx.CB_READONLY)
self.Bind(wx.EVT_COMBOBOX, self.OnTypeChanged, self.PouType)
infos_sizer.AddWindow(self.PouType, flag=wx.GROW)
language_label = wx.StaticText(self, label=_('Language:'))
infos_sizer.AddWindow(language_label, border=4,
flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP)
self.Language = wx.ComboBox(self, style=wx.CB_READONLY)
infos_sizer.AddWindow(self.Language, flag=wx.GROW)
button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL | wx.CENTRE)
self.Bind(wx.EVT_BUTTON, self.OnOK, button_sizer.GetAffirmativeButton())
main_sizer.AddSizer(button_sizer, border=20,
flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.LEFT | wx.RIGHT)
self.SetSizer(main_sizer)
for option in GetPouTypes():
if not type_readonly or _(option) == _(pou_type):
self.PouType.Append(_(option))
if pou_type is not None:
self.PouType.SetStringSelection(_(pou_type))
self.RefreshLanguage()
self.Fit()
self.PouNames = []
self.PouElementNames = []
def __init__(self, parent, folder, filter=None, editable=True):
wx.Panel.__init__(self, parent, style=wx.TAB_TRAVERSAL)
main_sizer = wx.BoxSizer(wx.VERTICAL)
self.Tree = wx.TreeCtrl(self,
style=(wx.TR_HAS_BUTTONS |
wx.TR_SINGLE |
wx.SUNKEN_BORDER |
wx.TR_HIDE_ROOT |
wx.TR_LINES_AT_ROOT |
wx.TR_EDIT_LABELS))
if wx.Platform == '__WXMSW__':
self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnTreeItemExpanded, self.Tree)
self.Tree.Bind(wx.EVT_LEFT_DOWN, self.OnTreeLeftDown)
else:
self.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnTreeItemExpanded, self.Tree)
self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnTreeItemCollapsed, self.Tree)
self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnTreeBeginLabelEdit, self.Tree)
self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnTreeEndLabelEdit, self.Tree)
main_sizer.AddWindow(self.Tree, 1, flag=wx.GROW)
if filter is not None:
self.Filter = wx.ComboBox(self, style=wx.CB_READONLY)
self.Bind(wx.EVT_COMBOBOX, self.OnFilterChanged, self.Filter)
main_sizer.AddWindow(self.Filter, flag=wx.GROW)
else:
self.Filter = None
self.SetSizer(main_sizer)
self.Folder = folder
self.Editable = editable
self.TreeImageList = wx.ImageList(16, 16)
self.TreeImageDict = {}
for item_type, bitmap in [(DRIVE, "tree_drive"),
(FOLDER, "tree_folder"),
(FILE, "tree_file")]:
self.TreeImageDict[item_type] = self.TreeImageList.Add(GetBitmap(bitmap))
self.Tree.SetImageList(self.TreeImageList)
self.Filters = {}
if self.Filter is not None:
filter_parts = filter.split("|")
for idx in xrange(0, len(filter_parts), 2):
if filter_parts[idx + 1] == "*.*":
self.Filters[filter_parts[idx]] = ""
else:
self.Filters[filter_parts[idx]] = filter_parts[idx + 1].replace("*", "")
self.Filter.Append(filter_parts[idx])
if idx == 0:
self.Filter.SetStringSelection(filter_parts[idx])
self.CurrentFilter = self.Filters[self.Filter.GetStringSelection()]
else:
self.CurrentFilter = ""
def create_main_panel(self):
self.panel = wx.Panel(self)
self.set_text = wx.StaticText(self.panel, -1, label="Showing : All (%d examples)" % self.m)
self.set_text.SetBackgroundColour(wx.WHITE)
font = wx.Font(20, wx.MODERN, wx.NORMAL, wx.BOLD)
self.set_text.SetFont(font)
self.hbox1 = wx.BoxSizer(wx.HORIZONTAL)
self.hbox1.Add(self.set_text, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)
self.draw_fig(True)
self.canvas = FigCanvas(self.panel, -1, self.fig)
# Bind the 'click' event for clicking on one of the axes
self.canvas.mpl_connect('button_press_event', self.on_click)
self.navigation_control = NavigationControlBox(self.panel, self, -1, "navigation control")
#self.label_key_box = LabelKeyBox(self.panel,-1)
self.data_set_control = DataSetControlBox(self.panel,self,-1)
self.build_button = wx.Button(self.panel, -1, label="Build")
self.build_button.Bind(wx.EVT_BUTTON, self.on_build)
self.reset_button = wx.Button(self.panel, -1, label="Reset")
self.reset_button.Bind(wx.EVT_BUTTON, self.on_reset)
self.exit_button = wx.Button(self.panel, -1, label="Exit")
self.exit_button.Bind(wx.EVT_BUTTON, self.on_exit)
self.vbox1 = wx.BoxSizer(wx.VERTICAL)
self.vbox1.Add(self.build_button, 0, flag=wx.CENTER | wx.BOTTOM)
self.vbox1.Add(self.reset_button, 0, flag=wx.CENTER | wx.BOTTOM)
self.vbox1.Add(self.exit_button, 0, flag=wx.CENTER | wx.BOTTOM)
self.hbox2 = wx.BoxSizer(wx.HORIZONTAL)
#self.hbox2.Add(self.label_key_box, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)
self.hbox2.Add(self.data_set_control, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)
self.hbox2.Add(self.navigation_control, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)
self.hbox2.Add(self.vbox1, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)
self.vbox2 = wx.BoxSizer(wx.VERTICAL)
self.vbox2.Add(self.hbox1, 0, flag=wx.CENTER | wx.TOP)
self.vbox2.Add(self.canvas, 1, flag=wx.CENTER | wx.CENTER | wx.GROW)
self.vbox2.Add(self.hbox2, 0, flag=wx.LEFT | wx.TOP)
self.panel.SetSizer(self.vbox2)
self.vbox2.Fit(self)
def create_main_panel(self):
self.panel = wx.Panel(self)
self.set_text = wx.StaticText(self.panel, -1, label="Showing : All (%d examples)" % self.m)
self.set_text.SetBackgroundColour(wx.WHITE)
font = wx.Font(20, wx.MODERN, wx.NORMAL, wx.BOLD)
self.set_text.SetFont(font)
self.hbox1 = wx.BoxSizer(wx.HORIZONTAL)
self.hbox1.Add(self.set_text, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)
self.draw_fig(True)
self.canvas = FigCanvas(self.panel, -1, self.fig)
# Bind the 'click' event for clicking on one of the axes
self.canvas.mpl_connect('button_press_event', self.on_click)
self.navigation_control = NavigationControlBox(self.panel, self, -1, "navigation control")
#self.label_key_box = LabelKeyBox(self.panel,-1)
self.data_set_control = DataSetControlBox(self.panel,self,-1)
self.build_button = wx.Button(self.panel, -1, label="Build")
self.build_button.Bind(wx.EVT_BUTTON, self.on_build)
self.reset_button = wx.Button(self.panel, -1, label="Reset")
self.reset_button.Bind(wx.EVT_BUTTON, self.on_reset)
self.exit_button = wx.Button(self.panel, -1, label="Exit")
self.exit_button.Bind(wx.EVT_BUTTON, self.on_exit)
self.vbox1 = wx.BoxSizer(wx.VERTICAL)
self.vbox1.Add(self.build_button, 0, flag=wx.CENTER | wx.BOTTOM)
self.vbox1.Add(self.reset_button, 0, flag=wx.CENTER | wx.BOTTOM)
self.vbox1.Add(self.exit_button, 0, flag=wx.CENTER | wx.BOTTOM)
self.hbox2 = wx.BoxSizer(wx.HORIZONTAL)
#self.hbox2.Add(self.label_key_box, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)
self.hbox2.Add(self.data_set_control, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)
self.hbox2.Add(self.navigation_control, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)
self.hbox2.Add(self.vbox1, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)
self.vbox2 = wx.BoxSizer(wx.VERTICAL)
self.vbox2.Add(self.hbox1, 0, flag=wx.CENTER | wx.TOP)
self.vbox2.Add(self.canvas, 1, flag=wx.CENTER | wx.CENTER | wx.GROW)
self.vbox2.Add(self.hbox2, 0, flag=wx.LEFT | wx.TOP)
self.panel.SetSizer(self.vbox2)
self.vbox2.Fit(self)
def __init__(self, *args, **kwargs):
super(CrossPlotPanel, self).__init__(*args, **kwargs)
self.figure = Figure()
self.canvas = FigureCanvas(self, -1, self.figure)
self.cmap = Colors.COLOR_MAP_RAINBOW
self.colorbar = None
self.collections = []
self.xdata = None
self.ydata = None
self.zdata = None
self.xlabel = ''
self.ylabel = ''
self.zlabel = ''
self.xlocator = MaxNLocator(6).tick_values
self.ylocator = MaxNLocator(6).tick_values
self.zlocator = MaxNLocator(6).tick_values
self.xlim = None
self.ylim = None
self.zlim = None
self.zmode = 'continuous'
self.classnames = {}
self.classcolors = {}
self.nullclass = np.nan
self.parts = None
self.shownparts = []
rect = [self.MAINAXLEFT, self.MAINAXBOTTOM, self.MAINAXWIDTH, self.MAINAXHEIGHT]
self.crossplot_ax = self.figure.add_axes(rect)
self.crossplot_ax.xaxis.set_major_locator(MaxNLocator(5))
self.crossplot_ax.xaxis.set_major_formatter(NullFormatter())
self.crossplot_ax.yaxis.set_major_locator(MaxNLocator(5))
self.crossplot_ax.yaxis.set_major_formatter(NullFormatter())
self.crossplot_ax.grid(axis='x', which='major', linestyle='-.')
self.crossplot_ax.grid(axis='y', which='major', linestyle='-.')
self.create_xlabel()
self.create_ylabel()
self.create_zlabel()
rect = [self.COLORBARLEFT, self.MAINAXBOTTOM, self.COLORBARWIDTH, self.MAINAXHEIGHT]
self.colorbar_ax = self.figure.add_axes(rect, sharey=self.zlabel_ax)
#self.colorbar_ax.yaxis.set_major_formatter(NullFormatter())
self.collectionproperties = dict(linewidths=0.5, s=30)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
self.SetSizer(sizer)
self.Fit()
# self.status_bar = self.Parent.StatusBar # TODO: tirar isso quando voltar a status_bar
self.canvas.mpl_connect('button_press_event', self.on_press)
self.canvas.mpl_connect('motion_notify_event', self.on_move)
def __init__(self, *args, **kwargs):
super(CrossPlotPanel, self).__init__(*args, **kwargs)
self.figure = Figure()
self.canvas = FigureCanvas(self, -1, self.figure)
self.cmap = Colors.COLOR_MAP_RAINBOW
self.colorbar = None
self.collections = []
self.xdata = None
self.ydata = None
self.zdata = None
self.xlabel = ''
self.ylabel = ''
self.zlabel = ''
self.xlocator = MaxNLocator(6).tick_values
self.ylocator = MaxNLocator(6).tick_values
self.zlocator = MaxNLocator(6).tick_values
self.xlim = None
self.ylim = None
self.zlim = None
self.zmode = 'continuous'
self.classnames = {}
self.classcolors = {}
self.nullclass = np.nan
self.parts = None
self.shownparts = []
rect = [self.MAINAXLEFT, self.MAINAXBOTTOM, self.MAINAXWIDTH, self.MAINAXHEIGHT]
self.crossplot_ax = self.figure.add_axes(rect)
self.crossplot_ax.xaxis.set_major_locator(MaxNLocator(5))
self.crossplot_ax.xaxis.set_major_formatter(NullFormatter())
self.crossplot_ax.yaxis.set_major_locator(MaxNLocator(5))
self.crossplot_ax.yaxis.set_major_formatter(NullFormatter())
self.crossplot_ax.grid(axis='x', which='major', linestyle='-.')
self.crossplot_ax.grid(axis='y', which='major', linestyle='-.')
self.create_xlabel()
self.create_ylabel()
self.create_zlabel()
rect = [self.COLORBARLEFT, self.MAINAXBOTTOM, self.COLORBARWIDTH, self.MAINAXHEIGHT]
self.colorbar_ax = self.figure.add_axes(rect, sharey=self.zlabel_ax)
#self.colorbar_ax.yaxis.set_major_formatter(NullFormatter())
self.collectionproperties = dict(linewidths=0.5, s=30)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
self.SetSizer(sizer)
self.Fit()
# self.status_bar = self.Parent.StatusBar # TODO: tirar isso quando voltar a status_bar
self.canvas.mpl_connect('button_press_event', self.on_press)
self.canvas.mpl_connect('motion_notify_event', self.on_move)