如何在wxPython中自动调整*wx.CheckListBox*的大小?

如何在wxPython中自动调整*wx.CheckListBox*的大小?,python,wxpython,Python,Wxpython,如果复选框标签的文本大于wx.CheckListBox的宽度,则必须更改其大小。简单的答案是不设置复选框的大小。这将自动将大小设置为最大项目。如果确实设置了大小参数,但文本不适合,请设置style=wx.LB_HSCROLL,并根据需要创建一个水平滑块。 下面是两个版本的self.clb import wx class ClbView(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, None,

如果复选框标签的文本大于wx.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() 

简单的回答是不要设置
复选框的大小。这将自动将大小设置为最大项目。如果确实设置了大小参数,但文本不适合,请设置
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()