0

チェックボックスを水平に表示する方法を見つけようとしています。おそらく、サイザー内のポジショニングを使用する方法があります。

□ 1 □ 2 □ 3

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()

これは私が望むものの外観になります。しかし、私の選択肢のリストは「3」しかありません。

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)
4

1 に答える 1

0

CheckListBox を使用できないと思います。ただし、手動で行うこともできます。ただし、チェックボックスを自分で作成する必要があります。wxpython 2.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)

WrapSizer は複雑なセットアップで動作させるのが難しい場合があるため、1 行を超えることが予想されない場合は、HORIZONTAL モードで通常の BoxSizer を使用する必要があります (私の場合は、ボタンを水平に移動したい場合だったと思います。次に、チェックボックスのラッピングリスト、別のチェックボックス、ボタン、textctrl の順に並べる.この場合、親サイザーとラップサイザーは両方とも水平であるため、混乱する.解決策: WrapSizer を垂直 BoxSizer でラップし、次に、それを水平 BoxSizer に含めると、うまくいくように見えます)。

于 2013-10-21T14:21:39.660 に答える