2017-07-27 4 views
0

J'ai un ListCtrl virtuel avec le mode de sélection unique. Maintenant, je veux personnaliser les clics, les clics-clics et les contrôles-clics sur les listitems. Pour ce faire, j'ai besoin de GetModifiers() pendant le gestionnaire d'événements de wx.EVT_LIST_ITEM_SELECTED. Comment je fais ça?Catch un clic sur l'élément dans ListCtrl avec des modificateurs

J'ai essayé les éléments suivants:

1) instancier self.keyboard = wx.KeyboardState() pendant initialisation() de mon ListCtrl personnalisé. Appelez ensuite self.keyboard.GetModifiers() pendant la gestion des événements.

2) Instancier la classe KeyboardState pendant la gestion des événements.

Pour tester si cela fonctionne, j'imprime simplement tous les modificateurs qui sont capturés. Mais c'est toujours 0 (c'est-à-dire MOD_NONE).

J'ai également essayé d'utiliser wx.EVT_LEFT_DOWN et wx.EVT_LEFT_UP au lieu de wx.EVT_LIST_ITEM_SELECTED. Le premier a les mêmes problèmes, le dernier n'est même pas viré, quand je clique sur un listitem.

Répondre

0

Ceci affecte à la fois un événement de souris et un élément sélectionné à la même chose, puis utilise event.Skip() pour s'assurer que nous voyons les deux.
Peut-être que cela pourrait vous donner une idée sur la façon de progresser.
Utilisez avec Shift, Ctrl etc et les combinaisons, mods vous donnera un nombre différent en fonction de ce qui est pressé.

import wx 

class Myframe(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None) 
     pan = wx.Panel(self) 
     self.listC = wx.ListCtrl(pan, style=wx.LC_REPORT) 
     self.listC.InsertColumn(0, 'Column1', width=50) 
     self.listC.InsertColumn(1, 'Column2', width=50) 
     self.listC.InsertColumn(2, 'Column3', width=50) 
     self.listC.Bind(wx.EVT_LEFT_DOWN, self.ListClick) 
     self.listC.Bind(wx.EVT_LIST_ITEM_SELECTED, self.ListSelected) 
     self.listC.InsertStringItem(0,"Item1") 
     self.listC.SetStringItem(0, 1,"Col 1 Item") 
     self.listC.SetStringItem(0, 2,"Col 2 Item") 
     self.listC.InsertStringItem(1,"Item2") 
     self.listC.SetStringItem(1, 1,"Col 1 Item") 
     self.listC.SetStringItem(1, 2,"Col 2 Item") 

    def ListClick(self, event): 
     mods = event.GetModifiers() 
     print mods 
     event.Skip() 

    def ListSelected(self, event): 
     print "selected" 

if __name__ == "__main__": 
    App = wx.App() 
    Myframe().Show() 
    App.MainLoop() 
+0

Merci pour votre clarification. – Arbo