【问题标题】:wx.ListCtrl: how can I select a row on EVT_RIGHT_DOWN?wx.ListCtrl:如何在 EVT_RIGHT_DOWN 上选择一行?
【发布时间】:2011-08-08 11:35:34
【问题描述】:

我正在用 wxpython 编写一个简单的数据库 GUI。

为了显示我的数据库条目,我使用了wx.ListCtrl。让我们考虑以下代码sn-p:

class BookList(wx.ListCtrl):
  def __init__(self, parent, ID=wx.ID_ANY):
    wx.ListCtrl.__init__(self, parent, ID)

    self.InsertColumn(0, 'Title')
    self.InsertColumn(1, 'Author')

    # set column width ...

    self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)


  def OnRightDown(self, event):
    menu = wx.Menu()
    delete = menu.Append(wx.ID_ANY, 'Delete Item')

    self.Bind(wx.EVT_MENU, self.OnDelete, delete)

    # select row

    self.PopupMenu(menu, event.GetPosition())

在生成菜单之前,我不知道如何选择行。

我想到了两种可能的解决方案:

  1. 使用wx.ListCtrl.Select(),但不知道如何获取我要选择的行对应的idx参数。
  2. 触发wx.EVT_LEFT_DOWN,但我不知道如何(甚至是否)可以做到。

我走对了吗?有没有更好的解决办法?

提前致谢。

【问题讨论】:

    标签: python wxpython wxwidgets


    【解决方案1】:

    我找到了一个解决方案,其中包含我猜到的两种可能的解决方案。

    我一直在跟踪当前选定的行。 sn-p 会说话:

    class BookList(wx.ListCtrl):
      def __init__(self, parent, ID=wx.ID_ANY):
        wx.ListCtrl.__init__(self, parent, ID)
    
        self.InsertColumn(0, 'Title')
        self.InsertColumn(1, 'Author')
    
        # set column width ...
    
        self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
        self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
    
        # currently selected row
        self.cur = None
    
    
      def OnLeftDown(self, event):
        if self.cur != None:
          self.Select( self.cur, 0) # deselect currently selected item
    
        x,y = event.GetPosition()
        row,flags = self.HitTest( (x,y) )
    
        self.Select(row)
        self.cur = row
    
    
      def OnRightDown(self, event):
        menu = wx.Menu()
        delete = menu.Append(wx.ID_ANY, 'Delete Item')
    
        self.Bind(wx.EVT_MENU, self.OnDelete, delete)
    
        # select row
        self.OnLeftDown(event)
    
        self.PopupMenu(menu, event.GetPosition())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      相关资源
      最近更新 更多