wxPython列表框的键盘接口

3 投票
3 回答
808 浏览
提问于 2025-04-16 08:34

我在Windows上用wxPython做了一个列表框,让用户可以选择选项。我希望用户能通过按下ENTER键来选择一个项目,就像他们双击一样。我知道怎么用C或C++通过Windows的API来实现这个功能,但在wxPython中找不到方法。有没有人知道怎么做?这看起来是个很简单的需求。

3 个回答

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()  
1

简单来说,wx.ListBox不支持这个功能。你可以试试用一个单列的wx.ListCtrl(报告模式)来代替。

1

也许我漏掉了一些细节,因为信息不多,但听起来你可以通过捕捉按键按下的事件来实现这个功能。也就是说,检查一下是不是按下了回车键,然后再调用你的 on_doubleclick 函数。除非有隐含的双击处理,否则这样就可以了。

撰写回答