【问题标题】:Python: How to freeze/dissable some items in wxCheckListBox?Python:如何冻结/禁用 wxCheckListBox 中的某些项目?
【发布时间】:2013-04-04 01:51:23
【问题描述】:

我正在尝试在 Python 中实现 wx.CheckListBox,我希望始终检查列表中的某些项目。我尝试在事件wx.EVT_CHECKLISTBOX 上使用SetCheckedStrings(stringList)。但是我得到了相反的结果,当我取消选中stringList 中的一项时,它是未选中的;当我再次单击它进行检查时,它永远不会让我再次检查。

谁能给我一些提示,让我保留wx.CheckListBox 中的某些项目总是被检查或使那些不可检查?

【问题讨论】:

    标签: python wxpython freeze checklistbox


    【解决方案1】:

    如果事件妨碍您,您可以随时使用self.box.Unbind(wx.EVT_CHECKLISTBOX) 将其禁用一段时间。然而,即使没有解除绑定,这个示例也适用于我:

    import wx
    
    CHOICES = ["One", "Two", "Three", "Four", "Five"]
    ALWAYS_ON = ["One", "Three"]
    
    class MainWindow(wx.Frame):
        def __init__(self, *args, **kwargs):
            wx.Frame.__init__(self, *args, **kwargs)
    
            self.panel = wx.Panel(self)
            self.box = wx.CheckListBox(self.panel, choices=CHOICES)
    
            self.sizer = wx.BoxSizer()
            self.sizer.Add(self.box)
    
            self.panel.SetSizerAndFit(self.sizer)  
            self.Show()
    
            self.box.Bind(wx.EVT_CHECKLISTBOX, self.OnCheckBoxList)
            self.box.SetCheckedStrings(ALWAYS_ON)
    
        def OnCheckBoxList(self, e):       
            index = e.GetSelection()
            label = self.box.GetString(index)
            if label in ALWAYS_ON:
                self.box.Check(index)           
    
    app = wx.App(False)
    win = MainWindow(None)
    app.MainLoop()
    

    【讨论】:

    • 感谢您的回复。我在我的电脑上试过你的代码:它出现了框“一”和“三”被选中。当我单击这些时,它们未被选中,我无法再次选中这些框。我正在运行 Mac OSX 10.8.2、python 2.7.2。当我在另一台运行 Linux 的计算机上尝试您的程序时,它运行良好。我认为 Mac 有这个问题。你有什么想法绕过这个吗?
    • 尝试将打印语句添加到事件处理程序。事件处理程序是否只调用一次?
    • 另外你的 Mac 系统表现得好像有这样一行 self.box.Check(index, False)。尝试使用它而不是 self.box.Check(index)。你也可以试试self.box.Check(index, True)。也许有一个错误,第二个参数的隐含值错误。
    • 我在事件处理程序中添加了打印,它只在我选中/取消选中一个项目时调用一次。当我尝试 self.box.Check(index,False): 第一次单击项目“One”时,它被取消选中,从第二次单击开始,它被选中并且不能再次取消选中。当我尝试 self.box.Check(index,True): 当点击项目“One”时,它被取消选中不能再次选中。
    • 因此您必须使用self.box.Check(index, False)self.box.Check(index, True) 才能获得所需的行为。不幸的是,我没有 Mac OS 来尝试它。你也可以在 wxPython 邮件列表中询问。
    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 2015-09-08
    • 2023-03-05
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多