在wxpython CheckListBox中,如何在选中一个框时自动取消另一个框的选中?

0 投票
1 回答
1697 浏览
提问于 2025-04-18 05:23

我有点困惑,不知道怎么动态获取每个框的状态变化。我也不明白怎么给复选框列表中的某一个框绑定事件。

我的目的是有几个框代表不同的参数:

A, B, C, D, E, 全选

默认情况下“全选”是被激活的,我希望如果选中了其他的框,“全选”能自动取消选中。

我该怎么做呢?

    self.list_choice = ['A', 'B', 'C', 'D', 'E', 'All']
    pos = (5, 20)
    self.list_param = wx.CheckListBox(self, wx.ID_ANY, pos, wx.DefaultSize,
                                         self.list_choice, style=1)

    self.list_param.Check(5, True)

我无法在列表发生变化时注册这个变化,只能在另一个事件(比如“开始”)被调用时读取一次列表。

1 个回答

1

为什么不把你的 list_param 绑定到一个 wx.EVT_CHECKLISTBOX 事件上呢?这样的话,如果选中了其他选项,就会自动取消选中 All,像这样做?

self.Bind(wx.EVT_CHECKLISTBOX, self.check_list_param, self.list_param)

def check_list_param(self, evt): 
    checked = self.list_param.GetChecked()
    if len(checked) > 1 and 5 in checked:
        self.list_param.Check(5, check=False)

撰写回答