如何在wx.GridBagSizer中实现wx.TextCtrl?

时间:2012-12-11 16:49:23

标签: python wxpython

这是我的代码:http://pastebin.com/WwZri3e3

我想知道如何在每个标签的右侧实现一个文本框 名字 姓 和用户名。

wxpython文档非常糟糕,我已经尝试了一切,以便通过wxpython获得更好的学习体验,而且此刻我只是在空中摇摆。

我发现学习其他代码比阅读文档更有帮助。

任何人都可以提供一些见解吗?谢谢!

2 个答案:

答案 0 :(得分:0)

我通常制作一个水平的boxsizer

def addWithLabel(parent,label,wxCtrl):
       sz_h1 = wx.BoxSizer(wx.HORIZONTAL)
       txt = wx.StaticText(parent,-1,label)
       sz_h1.Add(txt)
       sz_h1.Add(wxCtrl)
       return sz_h1

my_vertical_sizer.Add(addWithLabel(my_parent,"Some Label:",wx.TextCtrl(my_parent,-1)))

或者你可以将你的gridbagsizer添加到你的boxsizer而不是相反...

答案 1 :(得分:0)

我通常只使用一个GridBagSizer和一些定位变量来保持灵活性。

暂存器版本如下所示:

self.gbs = wx.GridBagSizer(hgap=5, vgap=5)
lbl_name_first = wx.StaticText(self.panel, label = "First Name :" )
txt_name_first = wx.TextCtrl(self.panel,size=(200,-1))
self.gbs.Add(lbl_name_first, pos=(1, 1))
self.gbs.Add(txt_name_first, pos=(1, 2))

如果为水平定位定义了一些“常量”,为垂直定位定义了行数,则事情看起来就像下面的代码。当需要在某处创建一些额外的空间时,命名列和跨度真的很方便。

# all caps mark 'constants'
COL_LEFT_LABEL = 2
COL_LEFT_FIELD = 3
SPAN_FULL_WIDTH = 4
nRowPosition = 1

lbl_name_first = wx.StaticText(self.panel, label = "First Name :" )
txt_name_first = wx.TextCtrl(self.panel,size=(200,-1))
self.gbs.Add(lbl_name_first, pos=(nRowPosition, COL_LEFT_LABEL))
self.gbs.Add(txt_name_first, pos=(nRowPosition, COL_LEFT_FIELD), flag=wx.EXPAND, span=(1, SPAN_FULL_WIDTH))
nRowPosition += 1

你可以(而且应该)进一步完善它,但这应该让你开始。