2011-08-08 17 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()) 

私はメニューを産卵前の行を選択する方法を見つけ出すことはできません。

私は約2つの解決策考えた:使用wx.ListCtrl.Select()

  1. を、私は、私が選択したい行に対応する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()) 
関連する問題