2010-12-15 2 views
2

Я использую список wxPython в Windows, чтобы получить выбор от пользователя, и я хотел бы, чтобы они могли выбрать элемент с помощью клавиши ENTER, как если бы они дважды щелкнули. Я знаю, как это сделать на C или C++, используя API Windows напрямую, но не могу найти, как это сделать, используя wxPython. Кто-нибудь знает как? Кажется очевидным, что нужно делать.Интерфейс клавиатуры для списка wxPython

ответ

1

Возможно, мне не хватает какого-либо нюанса, информации было мало, но похоже, что вы могли бы это сделать, поймав событие keydown, подходящее для ввода, а затем вызвав функцию on_doubleclick. Если есть неявная обработка с двойным щелчком, вам должно быть хорошо идти.

+0

Вот что я пытался, но, кажется, я не ловить события клавиатуры, направленные на ListBox. – 2010-12-15 15:35:13

+0

Вы привязываете событие к нужному объекту? Вопрос в том, что вы делаете `self.Bind (...)`, тогда список может есть ключ, прежде чем контейнер получит его. Если у вас есть ссылка в `self.listbox`, то` self.listbox.Bind (...) `может быть решением. – 2010-12-15 15:40:08

1

Простой ответ заключается в том, что wx.ListBox не поддерживает это. Попробуйте вместо этого использовать один столбец wx.ListCtrl (в режиме отчета).

1

Это работает для меня, ключ к Bind EVT_KEY_UP, а не EVT_KEY_DOWN:

import wx 

class myListBoxDemo(wx.Frame): 
    def __init__(self, parent): 
     wx.Frame.__init__(self, parent=parent, title="testing ListBox right-click") 
     self.panel = wx.Panel(self, -1) 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     self.myListBox = wx.ListBox(self.panel,style=wx.LB_HSCROLL|wx.LB_SINGLE) 
     self.myListBox.Bind(wx.EVT_KEY_UP, self.OnKeyDownSelectedList) 

     self.myListBox.Append('item 1') 
     self.myListBox.Append('item 2') 
     self.myListBox.Append('item 3') 
     self.myListBox.Append('item 4') 

     sizer.AddF(self.myListBox, wx.SizerFlags(1).Expand()) 
     self.panel.SetSizer(sizer) 

    def OnKeyDownSelectedList(self, event): 
     print "KeyCode: %d" % event.GetKeyCode() 
     print "ListBox Item Index: %d" % event.GetEventObject().GetSelection() 

import wx.lib.mixins.inspection as wit 
class AppWInspection(wx.App, wit.InspectionMixin): 
    def OnInit(self): 
     self.Init() # enable Inspection tool 
     return True 

if __name__ == "__main__": 
    app = AppWInspection()  
    f = myListBoxDemo(None) 
    f.Show() 
    app.MainLoop() 
Смежные вопросы