2017-07-27 2 views
0

Ich habe eine virtuelle ListCtrl mit Single-Selection-Modus. Jetzt möchte ich Klicks, Shift-Klicks und Control-Klicks auf Listenelemente anpassen. Dazu muss ich GetModifiers() während des Ereignishandlers von wx.EVT_LIST_ITEM_SELECTED ausführen. Wie mache ich das?Fangen Sie einen Klick auf Element in ListCtrl mit Modifikatoren

Ich habe versucht, die folgenden:

1) Instantiate self.keyboard = wx.KeyboardState() während init() meiner benutzerdefinierten ListCtrl. Rufen Sie dann self.keyboard.GetModifiers() während der Ereignisbehandlung auf.

2) Instanziieren Sie die KeyboardState-Klasse während der Ereignisbehandlung.

Um zu testen, ob es funktioniert, drucke ich nur alle Modifikatoren, die erfasst werden. Aber es ist immer 0 (d. H. MOD_NONE).

Ich habe auch versucht, wx.EVT_LEFT_DOWN und wx.EVT_LEFT_UP anstelle von wx.EVT_LIST_ITEM_SELECTED zu verwenden. Ersteres hat die gleichen Probleme, letzteres wird nicht einmal gefeuert, wenn ich auf einen Listeneintrag klicke.

Antwort

0

Dies weist ein Maus- und ein Element-ausgewähltes Ereignis demselben Objekt zu und verwendet dann event.Skip(), um sicherzustellen, dass wir beide sehen.
Vielleicht könnte dies Ihnen eine Idee geben, wie Sie Fortschritte machen können.
Verwenden Sie mit Shift, Ctrl etc und Kombinationen, mods geben Sie eine andere Zahl, je nachdem, was gedrückt wird.

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

Vielen Dank für die Klarstellung. – Arbo

Verwandte Themen