这是我的代码:
label_1 = wx.StaticText(self,-1,_("xxxxxxxxxxxxxxxxx"))
label_2 = wx.StaticText(self,-1,_("xxxxxxx: "))
self.item1= wx.TextCtrl(self,-1,"",style=wx.TE_PROCESS_ENTER)
self.item2= wx.TextCtrl(self, -1, "", style=wx.TE_PROCESS_ENTER)
self.item1.SetMinSize((200,-1))
self.item2.SetMinSize((200,-1))
sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
sizer_1.Add(label_1,0,wx.RIGHT|wx.ALIGN_CENTER_VERTICAL,10)
sizer_1.Add(self.item1,0,wx.ALIGN_CENTER_VERTICAL)
sizer_2.Add(label_2,0,wx.RIGHT|wx.ALIGN_CENTER_VERTICAL,10)
sizer_2.Add(self.item2,0,wx.ALIGN_CENTER_VERTICAL)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(sizer_1,0,wx.ALL,4)
sizer.Add(sizer_2,0,wx.ALL,4)
self.SetSizer(sizer)
self.Layout()
给出了:
为什么textctrl
与标签的距离不同?标签长度相同,textctrl应该" start"从他们的结局。
我该如何解决?
答案 0 :(得分:1)
wxPython默认设置将使小部件符合其最佳尺寸。获取静态文本控件和文本控件对的最佳方法是通过其size参数将两个StaticText小部件设置为特定大小。这样的事情就足够了:
size = (150, -1)
label_1 = wx.StaticText(self,-1, label="xxxxxxxxxxxxxxxxx", size=size)
label_2 = wx.StaticText(self,-1, label="xxxxxxx:", size=size)
如您所见,这也消除了向第二个标签的字符串添加填充的需要。
或者,您可以使用GridSizer
(或其中一个变体),这将产生相同的效果。
答案 1 :(得分:1)
除了关于使其与BoxSizer
一起使用的其他答案和评论之外,在我看来这个例子正在为网格大小调整而烦恼。由于网格的性质,它会自动对齐列,而不是需要程序员将框大小写入提交。以下是您使用wx.FlexGridSizer
:
import wx
class Panel(wx.Panel):
def __init__(self, *args, **kw):
super(Panel, self).__init__(*args, **kw)
# Create widgets
label_1 = wx.StaticText(self, -1, "xxxxxxxxxxxxxxxxx:")
label_2 = wx.StaticText(self, -1, "xxxxxxx:")
self.item1 = wx.TextCtrl(self, -1, "", size=(200,-1), style=wx.TE_PROCESS_ENTER)
self.item2 = wx.TextCtrl(self, -1, "", size=(200,-1), style=wx.TE_PROCESS_ENTER)
# put them into a grid sizer
fgs = wx.FlexGridSizer(2,2, 10,10)
fgs.Add(label_1, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
fgs.Add(self.item1)
fgs.Add(label_2, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
fgs.Add(self.item2)
# put a margin around the whole thing
sizer = wx.BoxSizer()
sizer.Add(fgs, 1, wx.EXPAND|wx.ALL, 10)
self.SetSizer(sizer)
self.Layout()
app = wx.App()
frm = wx.Frame(None, title="foobar")
pnl = Panel(frm)
frm.Show()
app.MainLoop()