2016-11-22 8 views

答えて

2

短い答えはCheckListBoxのサイズを設定しないことです。これにより、自動的にサイズが最大の項目に設定されます。サイズパラメータを設定してもテキストが収まらない場合は、style=wx.LB_HSCROLLと設定し、必要に応じて水平スライダーを作成します。
以下の両方のバージョンのデモでは、self.clb

import wx 

class ClbView(wx.Frame): 
    def __init__(self, parent): 
     wx.Frame.__init__(self, None, -1, 'CheckListBox', size=(250, 200)) 

    def createWidgets(self, list): 
     self.panel = wx.Panel(self, -1) 
#  self.clb = wx.CheckListBox(self.panel, -1, size=(100,150),choices=list,style=wx.LB_HSCROLL) 
     self.clb = wx.CheckListBox(self.panel, -1, choices = list) 
     self.btn_exit = wx.Button(self.panel, wx.ID_ANY, 'Exit') 

    def sizeWidgets(self): 
     self.vbox = wx.BoxSizer(wx.VERTICAL) 
     self.vbox.Add(self.clb, 0, wx.ALL|wx.CENTER, 5) 
     self.vbox.Add(self.btn_exit, 0, wx.CENTER) 
     self.panel.SetSizer(self.vbox) 
     self.Centre() 

class ClbControl: 
    def __init__(self): 
     self.list = ['Quite a long piece of text', 'Short text', 'X'] 
     self.createView() 

    def createView(self): 
     self.view = ClbView(None) 
     self.view.createWidgets(self.list) 
     self.view.sizeWidgets() 
     self.view.Show() 
     self.view.btn_exit.Bind(wx.EVT_BUTTON, self.onExit) 
     self.view.clb.Bind(wx.EVT_CHECKLISTBOX, self.onCLB) 

    def onCLB(self, evt): 
     x = int(evt.GetSelection()) 
     print "Box ",x," Accessed" 

    def onExit(self, evt): 
     self.view.Close() 

if __name__ == '__main__': 
    app = wx.App() 
    controller = ClbControl() 
    app.MainLoop() 
関連する問題