代码之家  ›  专栏  ›  技术社区  ›  Jawad Malik

如何通过箭头键更改突出显示的tkinter.button?

  •  2
  • Jawad Malik  · 技术社区  · 7 年前

    我正在使用Python中的tkinter库开发键盘应用程序。我做了一个键盘。我想突出显示一个键,单击箭头键,我想更改突出显示的键。这是我的键盘代码。

    from tkinter import *
    import tkinter
    
    Keyboard_App = tkinter.Tk()
    
    def select(value):
        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)
    
    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 ',
    ]
    entry = Text(Keyboard_App, width=97, height=8)
    entry.grid(row=1, columnspan=15)
    
    varRow = 2
    varColumn = 0
    
    for button in buttons:
        command = lambda x=button: select(x)
        if button != " Space ":
            tkinter.Button(Keyboard_App, text=button, width=5, bg="#000000", fg="#ffffff",
                           activebackground="#ffffff", activeforeground="#000000", relief="raised", padx=12,
                           pady=4, bd=4, command=command).grid(row=varRow, column=varColumn)
    
        if button == " Space ":
            tkinter.Button(Keyboard_App, text=button, width=60, bg="#000000", fg="#ffffff",
                           activebackground="#ffffff", activeforeground="#000000", relief="raised", padx=4,
                           pady=4, bd=4, command=command).grid(row=6, columnspan=16)
    
        varColumn += 1
        if varColumn > 10:
            varColumn = 0
            varRow += 1
    Keyboard_App.mainloop()
    

    这是我的键盘原图 Keyboard

    我希望它能像这样用箭头键移动。 KeyMoveable

    1 回复  |  直到 7 年前
        1
  •  2
  •   Miraj50 user2991863    7 年前

    你走吧。我已将箭头键绑定到按钮上。您可以使用它们进行导航。基地已经准备好了,我相信,但是你当然可以用导航做任何你想要的改变。

    它的工作方式是将按钮存储在一个二维列表中,这样我就可以通过它的二维位置引用它们。我将当前突出显示按钮的位置(默认值为[0,0])存储在单独的变量中。按下键时,当前按钮的边框将设置为默认值,并突出显示“下一步”按钮。

    from tkinter import *
    import tkinter
    
    Keyboard_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 = 1
    varColumn = 0
    
    def 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