使用箭头键在切换按钮之间移动

Moving through toggle buttons using arrow keys

作为我 的后续问题,我想知道是否有一种方法可以使用箭头键在多个切换按钮之间导航?

我的程序需要知道用户当前选择的是哪个切换按钮。

这是最终的解决方案。我知道这不是一个非常 "pythonic" 的解决方案,甚至不是传统上好的解决方案,但它确实有效。

#!/usr/bin/python
import wx
k = 0
Buttons = []
class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None, title = "Gonna Get Them Cursor Keys Workin'")
        self.panel = wx.Panel(self,wx.ID_ANY)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.flags_panel = wx.Panel(self, wx.ID_ANY, style = wx.SUNKEN_BORDER)

        self.sizer.Add(self.flags_panel)
        self.SetSizer(self.sizer,wx.EXPAND | wx.LEFT)
        self.flags = Flags(self.flags_panel, [8,12])#,rows = 12, columns = 8, radius = 10, hspace = 25, vspace = 25, x_start = 15, y_start = 15
        self.flags.Show()

class Flags (wx.Panel):
    def __init__(self,panel, num_flags = []):#,rows = 0,columns = 0,radius = 0, hspace = 0, vspace = 0,x_start = 0, y_start = 0
        wx.Panel.__init__(self,panel,-1, size = (350,700))

    num_rows = num_flags[0]
    num_columns = num_flags[1]
    x_pos_start = 10
    y_pos_start = 10
    xy_coords = []
    i = x_pos_start
    j = y_pos_start
    buttons = []
    self.position_tuple_array = []
    for i in range (num_columns):
        buttons.append('toggle button')
    self.ButtonValue = False
    for button in buttons:
        index = 0
        while index != 15: 
            i += 25
            index += 1
            self.position_tuple_array.append((i,j))
        xy_coords.append((i,j))
        j += 15
        i = 10
    print self.position_tuple_array
    global Buttons
    for k in range (len(self.position_tuple_array)):
        self.Button = wx.ToggleButton(self,-1,size = (10,10), pos = self.position_tuple_array[k])
        self.Button.Bind(wx.EVT_KEY_DOWN,self.OnKeyPress)
        Buttons.append(self.Button)
        self.Button.SetFocus()
        self.Button.Show()
    print Buttons
    #That text crap below goes here

def OnKeyPress(self,event):
    button = event.GetEventObject()
    keycode = event.GetKeyCode() #New Code
    print keycode
    global Buttons

    global k
    if k > len(Buttons):
        k = 0
    elif k < 0:
        k = len(Buttons) - 1
    if keycode == wx.WXK_LEFT:
        print "YOU MOVED LEFT"
        k -= 1
        Buttons[k].SetFocus()
    elif keycode == wx.WXK_RIGHT:
                    print "YOU MOVED RIGHT"
                    k += 1
                    Buttons[k].SetFocus()

            elif keycode == wx.WXK_UP:
                    print "YOU MOVED UP"
                    k -= 15
                    Buttons[k].SetFocus()

            elif keycode == wx.WXK_DOWN:
        print "YOU MOVED DOWN"
        k += 15
        Buttons[k].SetFocus()
    elif keycode == wx.WXK_RETURN:#End of New Code
        if not self.ButtonValue:
            button.SetBackgroundColour('#fe1919')
            self.ButtonValue = True
        else:
            button.SetBackgroundColour('#14e807')
            self.ButtonValue = False
    print self.position_tuple_array[k]
if __name__ == '__main__':
    app = wx.App(False)
    frame = Frame()
    frame.Show()
    app.MainLoop()