我正在用wxpython编写一个简单的数据库GUI。
为了显示我的数据库条目,我正在使用wx.ListCtrl
。让我们考虑以下代码片段:
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())
我无法弄清楚如何在产生菜单之前选择行。
我想到了两种可能的解决方案:
wx.ListCtrl.Select()
,但我不知道如何获取与我要选择的行对应的idx
参数。wx.EVT_LEFT_DOWN
,但我不知道如何(甚至是否)可以完成。我是正确的吗?有没有更好的解决方案?
提前致谢。
答案 0 :(得分:0)
我找到了一个解决方案,涉及我猜想的可能解决方案。
我已跟踪当前选定的行。摘录说明了一切:
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())