【问题标题】:wx.ListCtrl with TextEditMixin - Disable Editing of Selected Cellswx.ListCtrl with TextEditMixin - 禁用选定单元格的编辑
【发布时间】:2012-09-30 04:02:52
【问题描述】:

在使用ListCtrlTextEditMixin 时,有什么方法可以禁用用户对特定单元格的编辑?

我想有某种方式可以否决编辑事件,但我找不到它。

【问题讨论】:

    标签: python listview wxpython


    【解决方案1】:

    事件 wx.EVT_LIST_BEGIN_LABEL_EDIT:

    class EditableListCtrl(wx.ListCtrl, listmix.TextEditMixin):
        def __init__(self, parent, ID=wx.ID_ANY, pos=wx.DefaultPosition,
                     size=wx.DefaultSize, style=0):
            wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
            listmix.TextEditMixin.__init__(self)
            self.Bind(wx.EVT_LIST_BEGIN_LABEL_EDIT, self.OnBeginLabelEdit)
    
        def OnBeginLabelEdit(self, event):
            if event.m_col == 1:
                event.Veto()
            else:
                event.Skip()
    

    【讨论】:

      【解决方案2】:

      在 wxPython 4.0.0 版中:

      if event.m_col == 1 不起作用。使用

      if event.GetColumn() == 1

      改为。

      【讨论】:

        【解决方案3】:

        我记得,您必须绑定到 EVT_LIST_BEGIN_LABEL_EDIT。然后在您的事件处理程序中,您只需检查您所在的列,如果您位于您希望可编辑的列中,则执行“event.Allow()”,否则您否决。

        【讨论】:

        • evt.Veto()evt.Allow()有什么区别?
        • 呃,Veto 阻止了事件沿着事件链上升,而 Allow 让它继续前进。现在,一个更好的问题是 Allow 和 Skip 之间有什么区别?我不确定...
        • 哦,我的错误就是我想问的问题 :) 来自 xoomer.virgilio.it/infinity77/Phoenix Allow 是“这与否决权相反:它明确允许处理事件。” Skip 是“此方法可用于事件处理程序中,以控制是否在当前事件返回后调用绑定到此事件的其他事件处理程序。”,除了 Allow 仅在NotifyEvent 的孩子...
        • 如果它是别名,我不会感到惊讶。不过,您应该在 wxPython 邮件列表上询问官方答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-15
        相关资源
        最近更新 更多