Python 对于wx.CheckListBox,Set的工作方式与预期不同
我正在尝试创建两个带有不同选择列表的Python 对于wx.CheckListBox,Set的工作方式与预期不同,python,python-2.7,wxpython,Python,Python 2.7,Wxpython,我正在尝试创建两个带有不同选择列表的wx.CheckListBox项 导入wx 类MyFrame(wx.Frame): 定义初始化(自我、父项、id、标题): wx.Frame.\uuuuu init\uuuuuuu(self,parent,id,title,size=(256,256)) 面板=wx.面板(自-1) sizer=wx.BoxSizer(wx.HORIZONTAL) 选择一=['a','b','c'] 选项2=['d','e','f','g'] check_list_box_on
wx.CheckListBox
项
导入wx
类MyFrame(wx.Frame):
定义初始化(自我、父项、id、标题):
wx.Frame.\uuuuu init\uuuuuuu(self,parent,id,title,size=(256,256))
面板=wx.面板(自-1)
sizer=wx.BoxSizer(wx.HORIZONTAL)
选择一=['a','b','c']
选项2=['d','e','f','g']
check_list_box_one=wx.CheckListBox(self,wx.EXPAND | wx.ALL,choices=[]))
check_list_box_two=wx.CheckListBox(self,wx.EXPAND | wx.ALL,choices=[]))
选中列表框设置(选项)
选中列表框设置(选项)
添加(选中列表框)
添加(勾选列表框二)
面板.设置尺寸(施胶器)
self.Show()
app=wx.app()
MyFrame(无,-1,‘测试’)
app.MainLoop()
我希望有两个
复选框s具有不同的条目('a','b','c')和('d','e','f','g')。但显示的第二个框扩展为四个项目(作为choice\u two
list)字段中的项目数,其值来自choice\u one
list。我强烈建议您使用WxGlade设计器:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import wx
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.SetSize((276, 297))
self.check_list_box_1 = wx.CheckListBox(self, wx.ID_ANY, choices=["choice 1", "choice 2", "choice 3"])
self.check_list_box_2 = wx.CheckListBox(self, wx.ID_ANY, choices=["choice 1", "choice 2", "choice 3"])
self.__set_properties()
self.__do_layout()
def __set_properties(self):
self.SetTitle("mainFrame")
def __do_layout(self):
mainSizer = wx.FlexGridSizer(1, 2, 0, 0)
mainSizer.Add(self.check_list_box_1, 0, 0, 0)
mainSizer.Add(self.check_list_box_2, 0, 0, 0)
self.SetSizer(mainSizer)
self.Layout()
# end of class MyFrame
class MyApp(wx.App):
def OnInit(self):
self.frame = MyFrame(None, wx.ID_ANY, "")
self.SetTopWindow(self.frame)
self.frame.Show()
return True
# end of class MyApp
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()
我强烈建议您使用WxGlade designer:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import wx
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.SetSize((276, 297))
self.check_list_box_1 = wx.CheckListBox(self, wx.ID_ANY, choices=["choice 1", "choice 2", "choice 3"])
self.check_list_box_2 = wx.CheckListBox(self, wx.ID_ANY, choices=["choice 1", "choice 2", "choice 3"])
self.__set_properties()
self.__do_layout()
def __set_properties(self):
self.SetTitle("mainFrame")
def __do_layout(self):
mainSizer = wx.FlexGridSizer(1, 2, 0, 0)
mainSizer.Add(self.check_list_box_1, 0, 0, 0)
mainSizer.Add(self.check_list_box_2, 0, 0, 0)
self.SetSizer(mainSizer)
self.Layout()
# end of class MyFrame
class MyApp(wx.App):
def OnInit(self):
self.frame = MyFrame(None, wx.ID_ANY, "")
self.SetTopWindow(self.frame)
self.frame.Show()
return True
# end of class MyApp
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()
不要将wx.EXPAND | wx.ALL参数指定给CheckListBox,这是一个sizer的标志。大多数(几乎所有)wxPython控件的第二个参数是小部件ID。只需传递-1,它就会工作。谢谢!!!你说得对,这很有效!非常感谢汉克斯!有趣的是,即使有上述错误,在WxPython4+和python3下,您的代码仍然有效。你真的应该考虑用WXPythON4移动到Python 3。Python2.7和Wxpython2.8将在某个时候过时。不要给CheckListBox提供wx.EXPAND | wx.ALL参数,这是一个sizer的标志。大多数(几乎所有)wxPython控件的第二个参数是小部件ID。只需传递-1,它就会工作。谢谢!!!你说得对,这很有效!非常感谢汉克斯!有趣的是,即使有上述错误,在WxPython4+和python3下,您的代码仍然有效。你真的应该考虑用WXPythON4移动到Python 3。在某种程度上,Python2.7和Wxpython2.8将会过时。