def _layout_widgets(self, inputdesc):
nwidgets = len(self.widgets)
fgridsizer = wx.FlexGridSizer(nwidgets, 2, 5, 5)
for i, idesc in enumerate(inputdesc):
dispname = idesc['dispname'] + ":"
name = idesc['name']
widget = self.widgets[name]
label = wx.StaticText(self, label=dispname)
fgridsizer.Add(label, proportion=0.0, flag=wx.ALIGN_RIGHT)
fgridsizer.Add(widget.get_uiobj(), proportion=1.0, flag=wx.EXPAND)
if idesc['type'] == 'ommulti':
fgridsizer.AddGrowableRow(i)
# if idesc['type'] == 'ommulti':
# fgridsizer.Add(widget.get_uiobj(), proportion=1.0, flag=wx.EXPAND)
# else:
# fgridsizer.Add(widget.get_uiobj(), proportion=0.0, flag=wx.EXPAND)
fgridsizer.AddGrowableCol(1)
self.SetSizerAndFit(fgridsizer)
python类FlexGridSizer()的实例源码
def _init_sizers(self):
# generated method, don't edit
self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0)
self.flexGridSizer1.SetMinSize(wx.Size(200, 121))
self.flexGridSizer1.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)
self._init_coll_flexGridSizer1_Growables(self.flexGridSizer1)
self._init_coll_flexGridSizer1_Items(self.flexGridSizer1)
self.SetSizer(self.flexGridSizer1)
def __init__(self, parent, sms):
wxskinDialog.__init__(self, parent, -1, "SMS edit")
self.SetAutoLayout(False)
self.sms = sms
# Main window resizer object
sizer = wx.BoxSizer(wx.VERTICAL)
sizer = wx.FlexGridSizer(4,1)
self.smsLabel = wx.StaticText(self, -1, "Message Text (%d / 160)" % len(sms.message))
sizer.Add(self.smsLabel, 1, wx.ALIGN_CENTER | wx.ALL, 5)
smsTextId = wx.NewId()
self.smsText = wx.TextCtrl(self, smsTextId, sms.message, size=(300,100), style=wx.TE_MULTILINE | wx.TE_LINEWRAP, validator = pySIMvalidator(None, None, 160))
sizer.Add(self.smsText, 1, wx.ALIGN_CENTER | wx.ALL, 5)
hsizer = wx.FlexGridSizer(2,3)
label = wx.StaticText(self, -1, "Date: ")
hsizer.Add(label, 1, wx.ALL, 5)
label = wx.StaticText(self, -1, "From: ")
hsizer.Add(label, 1, wx.ALL, 5)
label = wx.StaticText(self, -1, "Status: ")
hsizer.Add(label, 1, wx.ALL, 5)
text = wx.TextCtrl(self, -1, self.sms.timestamp, style=wx.TE_READONLY)
hsizer.Add(text, 1, wx.ALL, 5)
self.numberCtrl = wx.TextCtrl(self, -1, self.sms.number, validator = pySIMvalidator("+*#pw0123456789", None, 20))
hsizer.Add(self.numberCtrl, 1, wx.ALL, 5)
choiceList = ['Read', 'Unread', 'Deleted']
self.ch = wx.Choice(self, -1, (80, 50), choices = choiceList)
for i in range(len(choiceList)):
if sms.status == choiceList[i]:
self.ch.SetSelection(i)
break
hsizer.Add(self.ch, 1, wx.ALL, 5)
sizer.Add(hsizer, 1, wx.ALL, 5)
buttons = wx.BoxSizer(wx.HORIZONTAL)
buttons.Add(wx.Button(self, ID_BUTTON_OK, "Save"), 1, wx.ALIGN_LEFT | wx.ALL, 20)
buttons.Add(wx.Button(self, wx.ID_CANCEL, "Cancel"), 1, wx.ALIGN_RIGHT | wx.ALL, 20)
sizer.Add(buttons, 1, wx.ALIGN_CENTER | wx.ALL, 5)
wx.EVT_BUTTON(self, ID_BUTTON_OK, self.onOK)
wx.EVT_TEXT(self.smsText, smsTextId, self.smsTextChange)
self.SetAutoLayout(1);
self.SetSizer(sizer)
sizer.Fit(self)
self.Layout()
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__(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 __do_layout(self):
# begin wxGlade: SerialConfigDialog.__do_layout
sizer_2 = wx.BoxSizer(wx.VERTICAL)
sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
self.sizer_flow_staticbox.Lower()
sizer_flow = wx.StaticBoxSizer(self.sizer_flow_staticbox, wx.HORIZONTAL)
self.sizer_timeout_staticbox.Lower()
sizer_timeout = wx.StaticBoxSizer(self.sizer_timeout_staticbox, wx.HORIZONTAL)
self.sizer_format_staticbox.Lower()
sizer_format = wx.StaticBoxSizer(self.sizer_format_staticbox, wx.VERTICAL)
grid_sizer_1 = wx.FlexGridSizer(3, 2, 0, 0)
self.sizer_1_staticbox.Lower()
sizer_1 = wx.StaticBoxSizer(self.sizer_1_staticbox, wx.VERTICAL)
sizer_basics = wx.FlexGridSizer(3, 2, 0, 0)
sizer_basics.Add(self.label_2, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 4)
sizer_basics.Add(self.choice_port, 0, wx.EXPAND, 0)
sizer_basics.Add(self.label_1, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 4)
sizer_basics.Add(self.combo_box_baudrate, 0, wx.EXPAND, 0)
sizer_basics.AddGrowableCol(1)
sizer_1.Add(sizer_basics, 0, wx.EXPAND, 0)
sizer_2.Add(sizer_1, 0, wx.EXPAND, 0)
grid_sizer_1.Add(self.label_3, 1, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 4)
grid_sizer_1.Add(self.choice_databits, 1, wx.EXPAND | wx.ALIGN_RIGHT, 0)
grid_sizer_1.Add(self.label_4, 1, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 4)
grid_sizer_1.Add(self.choice_stopbits, 1, wx.EXPAND | wx.ALIGN_RIGHT, 0)
grid_sizer_1.Add(self.label_5, 1, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 4)
grid_sizer_1.Add(self.choice_parity, 1, wx.EXPAND | wx.ALIGN_RIGHT, 0)
sizer_format.Add(grid_sizer_1, 1, wx.EXPAND, 0)
self.panel_format.SetSizer(sizer_format)
sizer_2.Add(self.panel_format, 0, wx.EXPAND, 0)
sizer_timeout.Add(self.checkbox_timeout, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 4)
sizer_timeout.Add(self.text_ctrl_timeout, 0, 0, 0)
sizer_timeout.Add(self.label_6, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 4)
self.panel_timeout.SetSizer(sizer_timeout)
sizer_2.Add(self.panel_timeout, 0, wx.EXPAND, 0)
sizer_flow.Add(self.checkbox_rtscts, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 4)
sizer_flow.Add(self.checkbox_xonxoff, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 4)
sizer_flow.Add((10, 10), 1, wx.EXPAND, 0)
self.panel_flow.SetSizer(sizer_flow)
sizer_2.Add(self.panel_flow, 0, wx.EXPAND, 0)
sizer_3.Add(self.button_ok, 0, 0, 0)
sizer_3.Add(self.button_cancel, 0, 0, 0)
sizer_2.Add(sizer_3, 0, wx.ALL | wx.ALIGN_RIGHT, 4)
self.SetSizer(sizer_2)
sizer_2.Fit(self)
self.Layout()
# end wxGlade
def __init__(self, a_entry, *args, **kwargs):
"""
create a new AddBookForm
:param a_entry: a dict for the address book entry
"""
wx.Panel.__init__(self, *args, **kwargs)
self._entry = a_entry
## create text boxes to edit: first name, last name, phone, email.
self.fname_text = wx.TextCtrl(self)
self.lname_text = wx.TextCtrl(self)
## still need phone and email here...
## use a FlexGridSizer:
S = wx.FlexGridSizer(rows=0, cols=2, vgap=8, hgap=8)
S.AddGrowableCol(idx=1, proportion=1)
S.Add(wx.StaticText(self, label="First Name:"), 0,
wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
S.Add(self.fname_text, flag=wx.EXPAND)
S.Add(wx.StaticText(self, label="Last Name:"), 0,
wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
S.Add(self.lname_text, flag=wx.EXPAND)
# Save and Cancel buttons
sav_but = wx.Button(self, label="Save Record")
sav_but.Bind(wx.EVT_BUTTON, self.onSave)
can_but = wx.Button(self, label="Reset Record")
can_but.Bind(wx.EVT_BUTTON, self.onCancel)
# a sizer for the buttons:
but_sizer = wx.BoxSizer(wx.HORIZONTAL)
but_sizer.Add((1,1), 1) #stretchable spave to shift buttons right
but_sizer.Add(can_but, 0, wx.ALL, 4)
but_sizer.Add(sav_but, 0, wx.ALL, 4)
#Put the whole thing in another sizer to
# layout the buttons...
Outer_Sizer = wx.BoxSizer(wx.VERTICAL)
Outer_Sizer.Add(S, 0, wx.ALL|wx.EXPAND, 10)
Outer_Sizer.Add(but_sizer, 0, wx.EXPAND|wx.RIGHT, 10)
self.SetSizerAndFit(Outer_Sizer)
self.load_data()
def __init__(self, a_entry, *args, **kwargs):
"""
create a new AddBookForm
:param a_entry: a dict for the address book entry
"""
wx.Panel.__init__(self, *args, **kwargs)
self._entry = a_entry
## create text boxes to edit: first name, last name, phone, email.
self.fname_text = wx.TextCtrl(self)
self.lname_text = wx.TextCtrl(self)
self.phone_text = wx.TextCtrl(self)
self.email_text = wx.TextCtrl(self)
## use a FlexGridSizer:
S = wx.FlexGridSizer(rows=0, cols=2, vgap=8, hgap=8)
S.AddGrowableCol(idx=1, proportion=1)
S.Add(wx.StaticText(self, label="First Name:"), 0,
wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
S.Add(self.fname_text, flag=wx.EXPAND)
S.Add(wx.StaticText(self, label="Last Name:"), 0,
wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
S.Add(self.lname_text, flag=wx.EXPAND)
S.Add(wx.StaticText(self, label="Phone Number:"), 0,
wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
S.Add(self.phone_text, flag=wx.EXPAND)
S.Add(wx.StaticText(self, label="Email Address:"), 0,
wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
S.Add(self.email_text, flag=wx.EXPAND)
# Save and Cancel buttons
sav_but = wx.Button(self, label="Save Record")
sav_but.Bind(wx.EVT_BUTTON, self.onSave)
can_but = wx.Button(self, label="Reset Record")
can_but.Bind(wx.EVT_BUTTON, self.onCancel)
# a sizer for the buttons:
but_sizer = wx.BoxSizer(wx.HORIZONTAL)
but_sizer.Add((1,1), 1) #stretchable spave to shift buttons right
but_sizer.Add(can_but, 0, wx.ALL, 4)
but_sizer.Add(sav_but, 0, wx.ALL, 4)
#Put the whole thing in another sizer to
# layout the buttons...
Outer_Sizer = wx.BoxSizer(wx.VERTICAL)
Outer_Sizer.Add(S, 0, wx.ALL|wx.EXPAND, 10)
Outer_Sizer.Add(but_sizer, 0, wx.EXPAND|wx.RIGHT, 10)
self.SetSizerAndFit(Outer_Sizer)
self.load_data()