2013-10-20 6 views
0

나는 가로로 체크 박스를 표시하는 방법을 생각하고 있습니다. 아마도 사이버 내부에서 위치를 사용하는 방법이있을 것입니다.사이 저에 가로 확인란 표시

□ 일 □ 두 □ 세

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) 

답변

0

나는 CheckListBox를 사용할 수 있다고 생각하지 않습니다. 그러나 수동으로 할 수 있습니다. 체크 박스를 직접 만들어야합니다. wxpython 2.9를 사용하는 경우 WrapSizer를 사용하여 여러 줄을 지원할 수 있습니다. 단 한 줄만 입력하면 BoxSizer가 올바르게 작동합니다. 이것은 완전히 작동하는 예제는 아니지만, 내가 작성한 코드의 실제 코드이므로 기본 코드가 작동해야합니다. self._outsizer는 윈도우 사이 저 (sizer) 였고, 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 복잡한에서 작업을 진행하는 까다로운 일이 될 수있는 당신은, 당신은 수평 모드에서 일반 팔렛에서 BoxSizer를 사용해야 하나의 라인을 가서 기대하지 않는 경우 설정 (내 생각 엔 내가 가로로 버튼을 누른 다음 체크 박스의 래핑 목록, 다음에 다른 체크 상자, 버튼, 그리고 textctrl을 원한다고 생각한다.)이 경우, 상위 sizer & 랩 사이즈가 둘 다 수평이기 때문에 해결 방법 : WrapSizer를 수직 BoxSizer에 랩 한 다음 수평 BoxSizer에 WrapSizer를 포함하면 제대로 작동합니다.

관련 문제