Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于wx.CheckListBox,Set的工作方式与预期不同_Python_Python 2.7_Wxpython - Fatal编程技术网

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将会过时。