How to change which tkinter Button is highlighted via arrow keys? How to change which tkinter Button is highlighted via arrow keys? tkinter tkinter

How to change which tkinter Button is highlighted via arrow keys?


There you go. I have bound the arrow keys to the buttons. You can navigate using them. The base is ready, I believe but you can of course make any changes you want with the navigation.

The way it works is that I store the buttons in a 2D list, so that I can refer to them by its 2D position. I store the current highlighted button's position (default is [0,0]) in a separate variable. On pressing the keys, the current button's border is set to default and the next button is highlighted.

from tkinter import *import tkinterKeyboard_App = tkinter.Tk()buttons = [    '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '=',    'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '<-',    'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '"',    'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', 'SHIFT',    ' Space ',]curBut = [-1,-1]buttonL = [[]]entry = Text(Keyboard_App, width=97, height=8)entry.grid(row=0, columnspan=15)varRow = 1varColumn = 0def leftKey(event):    if curBut == [-1,-1]:        curBut[:] = [0,0]        buttonL[0][0].configure(highlightbackground='red')    elif curBut[0] == 4:        buttonL[curBut[0]][curBut[1]].configure(highlightbackground='#d9d9d9')        curBut[:] = [0,10]        buttonL[0][10].configure(highlightbackground='red')    else:        buttonL[curBut[0]][curBut[1]].configure(highlightbackground='#d9d9d9')        curBut[:] = [curBut[0], (curBut[1]-1)%11]        buttonL[curBut[0]][curBut[1]%11].configure(highlightbackground='red')def rightKey(event):    if curBut == [-1,-1]:        curBut[:] = [0,0]        buttonL[0][0].configure(highlightbackground='red')    elif curBut[0] == 4:        buttonL[curBut[0]][curBut[1]].configure(highlightbackground='#d9d9d9')        curBut[:] = [0,0]        buttonL[0][0].configure(highlightbackground='red')    else:        buttonL[curBut[0]][curBut[1]].configure(highlightbackground='#d9d9d9')        curBut[:] = [curBut[0], (curBut[1]+1)%11]        buttonL[curBut[0]][curBut[1]%11].configure(highlightbackground='red')def upKey(event):    if curBut == [-1,-1]:        curBut[:] = [0,0]        buttonL[0][0].configure(highlightbackground='red')    elif curBut[0] == 0:        buttonL[curBut[0]][curBut[1]].configure(highlightbackground='#d9d9d9')        curBut[:] = [(curBut[0]-1)%5, 0]        buttonL[curBut[0]][curBut[1]%11].configure(highlightbackground='red')    else:        buttonL[curBut[0]][curBut[1]].configure(highlightbackground='#d9d9d9')        curBut[:] = [(curBut[0]-1)%5, curBut[1]]        buttonL[curBut[0]][curBut[1]%11].configure(highlightbackground='red')def downKey(event):    if curBut == [-1,-1]:        curBut[:] = [0,0]        buttonL[0][0].configure(highlightbackground='red')    elif curBut[0] == 3:        buttonL[curBut[0]][curBut[1]].configure(highlightbackground='#d9d9d9')        curBut[:] = [(curBut[0]+1)%5, 0]        buttonL[curBut[0]][curBut[1]%11].configure(highlightbackground='red')    else:        buttonL[curBut[0]][curBut[1]].configure(highlightbackground='#d9d9d9')        curBut[:] = [(curBut[0]+1)%5, curBut[1]]        buttonL[curBut[0]][curBut[1]%11].configure(highlightbackground='red')def select(value, x, y):    if curBut != [-1,-1]:        buttonL[curBut[0]][curBut[1]].configure(highlightbackground='#d9d9d9')    curBut[:] = [x,y]    buttonL[x][y].configure(highlightbackground='red')    if value == "<-":        input = entry.get("1.0", 'end-2c')        entry.delete("1.0", END)        entry.insert("1.0", input, END)    elif value == " Space ":        entry.insert(tkinter.END, ' ')    elif value == "Tab":        entry.insert(tkinter.END, '   ')    else:        entry.insert(tkinter.END, value)for button in buttons:    if button != " Space ":        but = tkinter.Button(Keyboard_App, text=button, width=5, bg="#000000", fg="#ffffff", highlightthickness=4,                        activebackground="#ffffff", activeforeground="#000000", relief="raised", padx=12,                       pady=4, bd=4, command=lambda x=button, i=varRow-1, j=varColumn: select(x, i, j))        buttonL[varRow-1].append(but)        but.grid(row=varRow, column=varColumn)    if button == " Space ":        but = tkinter.Button(Keyboard_App, text=button, width=60, bg="#000000", fg="#ffffff", highlightthickness=4,                        activebackground="#ffffff", activeforeground="#000000", relief="raised", padx=4,                       pady=4, bd=4, command=lambda x=button, i=varRow-1, j=varColumn: select(x, i, j))        buttonL[varRow-1].append(but)        but.grid(row=6, columnspan=16)    varColumn += 1    if varColumn > 10:        varColumn = 0        varRow += 1        buttonL.append([])Keyboard_App.bind('<Left>', leftKey)Keyboard_App.bind('<Right>', rightKey)Keyboard_App.bind('<Up>', upKey)Keyboard_App.bind('<Down>', downKey)Keyboard_App.mainloop()

enter image description here