2011-08-08 3 views
0

나는 wxpython으로 간단한 데이터베이스 GUI를 작성하고있다.wx.ListCtrl : EVT_RIGHT_DOWN에서 행을 선택하려면 어떻게해야합니까?

데이터베이스 항목을 표시하려면 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()) 

메뉴를 생성하기 전에 행을 선택하는 방법을 알 수 없습니다.

나는에 대한 두 가지 가능한 솔루션 생각 :

  1. 사용 wx.ListCtrl.Select(),하지만 내가 선택하려는 행에 해당하는 idx 매개 변수를 얻는 방법을 모르겠어요.
  2. 트리거 wx.EVT_LEFT_DOWN,하지만 어떻게 할 수 있을지는 모르겠다.

올바른 방법인가요? 더 나은 해결책이 있습니까?

미리 감사드립니다.

답변

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()) 
관련 문제