Wxpython 在尺寸标注器中显示水平复选框

Wxpython 在尺寸标注器中显示水平复选框,wxpython,Wxpython,我试图找出一种水平显示复选框的方法。 也许有一种方法可以在施胶器内使用定位 □ 1□ 2□ 三 import wx class MainFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,wx.ID_ANY,title='test chkBx') self.hbox = wx.BoxSizer() self.vbox= wx.BoxSizer(

我试图找出一种水平显示复选框的方法。 也许有一种方法可以在施胶器内使用定位

□ 1□ 2□ 三

import wx

class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,wx.ID_ANY,title='test chkBx')        

        self.hbox = wx.BoxSizer()
        self.vbox= wx.BoxSizer(wx.VERTICAL)
        self.background = wx.Panel(self)

        choices = ['one', 'two', 'three']

        self.chkBx = wx.CheckListBox(self, choices=choices)       
        self.bottomview = wx.TextCtrl(self,
                                     style=wx.TE_MULTILINE|wx.TE_RICH|wx.BORDER_SIMPLE)        

        hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
        hsizer1.Add(self.chkBx,1,flag=wx.ALIGN_RIGHT|wx.RIGHT|wx.EXPAND) 

        hsizer2 = wx.BoxSizer(wx.HORIZONTAL)
        hsizer2.Add(self.bottomview,1,flag = wx.EXPAND)        

        self.vbox.Add(hsizer1,proportion = 2,flag = wx.EXPAND)
        self.vbox.Add(hsizer2,proportion = 8,flag = wx.EXPAND)

        self.SetSizer(self.vbox)
        self.Show()

app = wx.App(redirect=False)
frame = MainFrame()
app.MainLoop()
这将有我想要的外观。但我的选择列表只有“三个”

choices = ['one']
self.chkBx1 = wx.CheckListBox(self, choices=choices)
choices = ['two']
self.chkBx2 = wx.CheckListBox(self, choices=choices)
choices = ['three']
self.chkBx3 = wx.CheckListBox(self, choices=choices)
self.bottomview = wx.TextCtrl(self,
                             style=wx.TE_MULTILINE|wx.TE_RICH|wx.BORDER_SIMPLE)        

hsizer1 = wx.BoxSizer(wx.HORIZONTAL)
hsizer1.Add(self.chkBx1,1,flag=wx.ALIGN_RIGHT|wx.RIGHT|wx.EXPAND)
hsizer1.Add(self.chkBx2,1,flag=wx.ALIGN_RIGHT|wx.RIGHT|wx.EXPAND)
hsizer1.Add(self.chkBx3,1,flag=wx.ALIGN_RIGHT|wx.RIGHT|wx.EXPAND)

我认为你不能使用这个复选框。但是,您可以手动执行。不过,你必须自己创建复选框。如果您使用的是wxpython2.9,那么也可以使用WrapSizer来获得多行支持,否则对于单行,BoxSizer可以正常工作。这不是一个完全可以工作的示例,但它是我编写的实际代码,因此基本代码应该可以工作。self._outsizer是窗口大小调整器,fieldenum是键到值和值到键的双向字典(因此检查字符串,您可能不需要)。self.field*是所有字典:

fieldenum = fielddata.mnemonics
self.fieldenums[fieldname] = fieldenum
self.fieldenumsizers[fieldname] = _wx.WrapSizer(_wx.HORIZONTAL)
fes = self.fieldenumsizers[fieldname]
self.fieldenumwindows[fieldname] = []
for fe in [x for x in fieldenum if isinstance(x, basestring)]:
    self.fieldenumwindows[fieldname].append(_wx.CheckBox(self, -1, label=fe))
    fes.Add(self.fieldenumwindows[fieldname][-1])
fes.Layout()
self.outsizer.Add(fes, 0, _wx.EXPAND)
如果你不想越过一条线,你应该在水平模式下使用一个普通的BoxSizer,因为WrapSizer在复杂的设置中很难工作(我认为我的情况是,我希望水平移动一个按钮,然后是复选框的包装列表,然后是另一个复选框,然后是按钮,然后是文本Ctrl。在这种情况下,因为父级尺寸标注器和包装尺寸标注器都是水平的,所以会混淆。解决方案:将包装器包装在垂直的盒子尺寸标注器中,然后将其包含在水平B中。)oxSizer,这似乎有效)