键盘接口到wxPython列表框

时间:2010-12-15 14:50:29

标签: python windows wxpython

我在Windows上使用wxPython列表框从用户那里获得选择,我希望他们能够使用ENTER键选择一个项目,就好像他们已经双击一样。我知道如何使用Windows API直接在C或C ++中执行此操作,但似乎无法使用wxPython找到如何执行此操作。谁知道怎么样?这似乎是一件显而易见的事情。

3 个答案:

答案 0 :(得分:1)

也许我错过了一些细微差别,没有太多的信息可以继续,但听起来你可以通过捕获keydown事件,匹配输入然后调用你的on_doubleclick函数来实现这一点。除非有隐含的双击处理,否则你应该好好去。

答案 1 :(得分:1)

简单的答案是wx.ListBox不支持它。尝试使用一列wx.ListCtrl(在报告模式下)。

答案 2 :(得分:1)

这对我有用,关键是绑定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()