Я новичок здесь, и у меня все еще есть учебные отношения с Python и tkinter. Для моего первого проекта я хотел создать платформу для ретро-игр, основанную на моей собственной коллекции игр, на основе GUI, вдохновленной Netflix. Пока что это в основном работает так, как задумано: категории выбираются случайным образом из списка всех доступных категорий, и на основании этого создается кнопка для каждой игры в категории. Опять же, все это работает нормально.
Проблема: учитывая характер приложения, важно, чтобы пользователь мог управлять им с помощью клавиатуры или контроллера Bluetooth. Я могу установить фокус на первую кнопку в первой категории, но мне сложно понять, как на самом деле переместить фокус с одной кнопки на другую (влево и вправо) или с одного кадра на другой (вверх и вниз) используя, пока, клавиши со стрелками. Есть ли несколько простой способ сделать это? Я искал несколько дней и нашел очень мало.
Код, который у меня есть: (изменить, чтобы удалить данные вечного модуля)
import tkinter as tk
c1i = []
c1b = []
tab_1 = ["a", "b", "c", "d", "e", "f"]
def populate():
for i in tab_1:
new_button = tk.Button(scrl_frame, bd = 0, command = None)
c1b.append(new_button)
new_button.pack(side = "left", padx = 5)
root = tk.Tk()
root.geometry ("800x1200")
main_frame = tk.Frame(root, height = 1200, width = 800)
main_canvas = tk.Canvas(main_frame, height = 1200, width = 800, bg = "black")
frame_1 = tk.Frame(main_canvas, height = 170, width = 800, bg = "black")
canvas_1 = tk.Canvas(frame_1, height = 170, width = 800, bg = "black")
scrl_frame = tk.Frame(canvas_1, bg = "black")
scrl = tk.Scrollbar(frame_1, orient = "horizontal", bg = "black", command = canvas_1.xview)
scrl_frame.bind("<Configure>", lambda k: canvas_1.configure(scrollregion = canvas_1.bbox("all")))
populate()
canvas_1.create_window((0, 0), window = scrl_frame, anchor = "w")
canvas_1.configure(xscrollcommand = scrl.set)
main_frame.pack(fill = "both", expand = True)
main_canvas.pack(fill = "both", expand = True)
frame_1.pack(fill = "x", side = "bottom")
canvas_1.pack(pady = 5, fill = "both", expand = True)
scrl.pack(fill = "x")
root.mainloop()