以行和列二维表格方式排版组件的布局管理器,还有wx.FlexGridSizer,它比GridSizer更灵活一些,wx.GridSizer的单元格大小都一样,而wx.FlexGridSizer的单元格仅限制每行的单元格高度一致、每列的单元格宽度一致,但无需所有行列的宽高一致。它的语法为:
fgs=wx.FlexGridSizer(rows=1, cols=0, vgap=0, hgap=0)
fgs.AddMany(self, items)
rows定义行数,cols定义列数,vgap指定垂直方向上的行间距,hgap指定水平方向上的列间距。
程序清单:flexGridSizer.py
import wx
# 继承Frame
class FlexGridSizer(wx.Frame):
def __init__(self, *args, **kwargs):
super(FlexGridSizer, self).__init__(*args, **kwargs)
# 初始化窗口UI
self.init_ui()
def init_ui(self):
v_box = wx.BoxSizer(wx.VERTICAL)
fgs = wx.FlexGridSizer(4, 2, 9, 25)
name = wx.StaticText(self, label="客户名称")
name_input = wx.TextCtrl(self)
address = wx.StaticText(self, label="收货地址")
address_input = wx.TextCtrl(self)
remark = wx.StaticText(self, label="备注信息")
remark_input = wx.TextCtrl(self, style=wx.TE_MULTILINE)
# 按钮
submit_btn = wx.Button(self, label="确定", size=(80, 80))
cancel_btn = wx.Button(self, label="取消", size=(80, 80))
fgs.AddMany([(name, 0), (name_input, 1, wx.EXPAND),
(address, 0), (address_input, 1, wx.EXPAND),
(remark, 1, wx.EXPAND), (remark_input, 1, wx.EXPAND),
(submit_btn, 0, wx.ALIGN_RIGHT), (cancel_btn, 0, wx.ALIGN_LEFT)])
fgs.AddGrowableRow(2, 1) # 指定第3行适配屏幕大小
fgs.AddGrowableCol(1, 1) # 指定第2列适配屏幕大小
v_box.Add(fgs, proportion=1, flag=wx.ALL | wx.EXPAND, border=10)
self.SetSizer(v_box)
self.SetTitle("FlexGridSizer布局")
self.Centre()
self.Show(True)
def main():
app = wx.App(False)
FlexGridSizer(None)
app.MainLoop()
if __name__ == "__main__":
main()
运行程序之后,弹出的窗口如下:
网格布局中的AddGrowableRow(idx,proportion=0)方法,指定要自动适配屏幕大小的行,AddGrowableCol(idx, proportion=0) 指定要自动适配屏幕大小的列。注意:被指定的行或列,需要添加wx.EXPAND标记才有效。
好了,FlexGridSizer的内容就说到这了,关注我,下一节更精彩。
码字不易,你的关注和转发是对我最大的鼓励,谢谢!
一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,关注我,你就赚到了。我正在分享Python、前端、Java和App方面的干货了。赶紧来围观啊!!!