为了账号安全,请及时绑定邮箱和手机立即绑定

wxpython:GridBagSizer 让我很困惑

wxpython:GridBagSizer 让我很困惑

扬帆大鱼 2021-11-30 16:33:29
我是 python GUI 的新手,wxpython也是。现在我面临以下问题。这里的代码是import wxclass Example(wx.Frame):    def __init__(self, parent, title):        super(Example, self).__init__(parent, title=title)        self.InitUI()        self.Centre()        self.Show()    def InitUI(self):        panel = wx.Panel(self)        sizer = wx.GridBagSizer(0, 0)        text = wx.StaticText(panel, label="Name:")        sizer.Add(text, pos=(0, 0), flag=wx.ALL, border=5)        tc = wx.TextCtrl(panel)        sizer.Add(tc, pos=(0, 1), span=(1, 2), flag=wx.EXPAND | wx.ALL, border=5)        text1 = wx.StaticText(panel, label="address")        sizer.Add(text1, pos=(1, 0), flag=wx.ALL, border=5)        tc1 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)        sizer.Add(tc1, pos=(1, 1), span=(1, 3), flag=wx.EXPAND | wx.ALL, border=5)        text11 = wx.StaticText(panel, label="address2")        sizer.Add(text11, pos=(1, 4), flag=wx.ALL, border=5)        tc11 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)        sizer.Add(tc11, pos=(1, 5), span=(1, 3), flag=wx.EXPAND | wx.ALL, border=5)        text2 = wx.StaticText(panel, label="age")        sizer.Add(text2, pos=(2, 0), flag=wx.ALL, border=5)        tc2 = wx.TextCtrl(panel)        sizer.Add(tc2, pos=(2, 1), flag=wx.ALL, border=5)        text3 = wx.StaticText(panel, label="Mob.No")        sizer.Add(text3, pos=(2, 2), flag=wx.ALIGN_CENTER | wx.ALL, border=5)这里的结果是让我感到困惑的是标签。address2它显然没有跨越三列。text11 = wx.StaticText(panel, label="address2")sizer.Add(text11, pos=(1, 4), flag=wx.ALL, border=5)tc11 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)sizer.Add(tc11, pos=(1, 5), span=(1, 3), flag=wx.EXPAND | wx.ALL, border=5)但是address2标签的代码与标签相同,address除了 param pos。有人可以解释一下。环境:python3.7/wxpython4.0.4(最新)
查看完整描述

1 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

那3列的定义是什么?

您是否为要使用的第 5,6 和 7 列定义了任何内容sizer?

没有东西可以使用 sizer 不知道这些列有多大,所以你必须给它一些东西来使用或定义一个空的单元格大小。


import wx


class Example(wx.Frame):


    def __init__(self, parent, title):

        super(Example, self).__init__(parent, title=title, size=(750,-1))


        self.InitUI()

        self.Centre()

        self.Show()


    def InitUI(self):

        panel = wx.Panel(self, -1)

        sizer = wx.GridBagSizer(0, 7)


        text = wx.StaticText(panel, label="Name:")

        sizer.Add(text, pos=(0, 0), flag=wx.ALL, border=5)

#

# place some dummy text to give the sizer something to work with

#

#        dummy4 = wx.StaticText(panel, label="something")

#        sizer.Add(dummy4, pos=(0, 4), flag=wx.ALL, border=5)

#        dummy5 = wx.StaticText(panel, label="something")

#        sizer.Add(dummy5, pos=(0, 5), flag=wx.ALL, border=5)

#        dummy6 = wx.StaticText(panel, label="something")

#        sizer.Add(dummy6, pos=(0, 6), flag=wx.ALL, border=5)

#        dummy7 = wx.StaticText(panel, label="something")

#        sizer.Add(dummy7, pos=(0, 7), flag=wx.ALL, border=5)

#

# or set a cell size for empty cells

#

        sizer.SetEmptyCellSize((130,20))


        tc = wx.TextCtrl(panel)

        sizer.Add(tc, pos=(0, 1), span=(1, 2), flag=wx.EXPAND | wx.ALL, border=5)


        text1 = wx.StaticText(panel, label="address")

        sizer.Add(text1, pos=(1, 0), flag=wx.ALL, border=5)


        tc1 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)

        sizer.Add(tc1, pos=(1, 1), span=(1, 3), flag=wx.EXPAND | wx.ALL, border=5)


        text11 = wx.StaticText(panel, label="address2")

        sizer.Add(text11, pos=(1, 4), flag=wx.ALL, border=5)


        tc11 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)

        sizer.Add(tc11, pos=(1, 5), span=(1, 3), flag=wx.EXPAND | wx.ALL, border=5)


        text2 = wx.StaticText(panel, label="age")

        sizer.Add(text2, pos=(2, 0), flag=wx.ALL, border=5)


        tc2 = wx.TextCtrl(panel)

        sizer.Add(tc2, pos=(2, 1), flag=wx.ALL, border=5)


        text3 = wx.StaticText(panel, label="Mob.No")

        sizer.Add(text3, pos=(2, 2), flag=wx.ALIGN_CENTER | wx.ALL, border=5)


        tc3 = wx.TextCtrl(panel)

        sizer.Add(tc3, pos=(2, 3), flag=wx.EXPAND | wx.ALL, border=5)


        text4 = wx.StaticText(panel, label="Description")

        sizer.Add(text4, pos=(3, 0), flag=wx.ALL, border=5)


        tc4 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)

        sizer.Add(tc4, pos=(3, 1), span=(1, 3), flag=wx.EXPAND | wx.ALL, border=5)

        sizer.AddGrowableRow(3)


        buttonOk = wx.Button(panel, label="Ok")

        buttonClose = wx.Button(panel, label="Close")


        sizer.Add(buttonOk, pos=(4, 2), flag=wx.ALL, border=5)

        sizer.Add(buttonClose, pos=(4, 3), flag=wx.ALL, border=5)


        panel.SetSizerAndFit(sizer)


app = wx.App()

Example(None, title='GridBag Demo')

app.MainLoop()

ps 如果您只是将地址 2 放在地址 1 下方,则布局可能会更好

//img1.sycdn.imooc.com//61a5e20e0001eef207460489.jpg

查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信