簡體   English   中英

如何在 python 中通過箭頭鍵更改按鈕選擇

[英]How to change button selection by arrow keys in python

我在python中使用tkinter庫。我做了一個按鈕。 我想通過箭頭鍵將突出顯示的按鈕更改為下一個按鈕。 這是我的代碼。 感謝您的任何幫助

from tkinter import*

w = Tk()
w.title("Virtual Message")
w.configure(bg="#e6e8b5")
w.option_add("*Font", "consolas 40",)

def bttn(x, y, text, cmd, img, wid, hei):
    def on_enter(e):
        print(mybutton)
        mybutton['background'] = "green"
        mybutton['foreground'] = "orange"

    def on_leave(e):
        mybutton['background'] = "orange"
        mybutton['foreground'] = "green"

    mybutton = Button(w, width=wid, height=hei, text=text,
                      fg="green", bg= "orange", border=0, image=img, pady=20, bd=5,
                      activeforeground="green",
                      activebackground="orange", command=cmd, compound=TOP)

    mybutton.bind("<Enter>", on_enter)
    mybutton.bind("<Leave>", on_leave)
    mybutton.place(x=x, y=y)

photo1 = PhotoImage(file="picture/food.png")
photo2 = PhotoImage(file="picture/shower.png")
photo3 = PhotoImage(file="picture/toilet.png")
photo4 = PhotoImage(file="picture/tv.png")
photo5 = PhotoImage(file="picture/monk.png")
photo6 = PhotoImage(file="picture/music.png")
photo7 = PhotoImage(file="picture/sos.png")

bttn(50, 50, "หิว", setup_lineNotify1, photo1, 375, 300)
bttn(50, 500, "อาบน้ำ", setup_lineNotify2, photo2, 375, 300)
bttn(458.25, 50, "ขับถ่าย", setup_lineNotify3, photo3, 375, 300)
bttn(458.25, 500, "โทรทัศน์", setup_lineNotify4, photo4, 375, 300)
bttn(866.5, 50, "สวดมนต์", setup_lineNotify5, photo5, 375, 300)
bttn(866.5, 500, "ฟังเพลง", setup_lineNotify6, photo6, 375, 300)
bttn(1275, 50, "ช่วยเหลือ", setup_lineNotify7, photo7, 375, 750)

def main():
    w.mainloop()

if __name__ == "__main__":
    main()

This Picture 當我用鼠標點擊 select 時

在此處輸入圖像描述

您可以將按鈕綁定到<Left><Right><Up><Down>事件。 要將焦點設置到特定按鈕,請使用<button-widget>.focus_set()

考慮到您提供的代碼,您可以按順序存儲所有按鈕小部件,然后根據您想要從一個按鈕切換到另一個按鈕的精確程度添加綁定。

此外,如果按鈕的容器小部件不是主要的 window,則還需要在容器小部件上使用.focus_set()方法。

說明代碼:

from tkinter import *

def on_right(e):
    global button2
    button2.focus_set()
    

def on_left(e):
    global button1
    button1.focus_set()

root = Tk()

button1 = Button(root, text = "Button1", font = ('Comic Sans', 15, 'bold'), bg = "white", fg = "black")
button1.grid(row = 0, column = 0, sticky = NSEW, ipadx = 5, ipady = 2, padx = 5, pady = 5)
button1.bind("<Right>", on_right)
button1.bind("<FocusIn>", lambda e: button1.configure(bg = "black", fg = "white"))
button1.bind("<FocusOut>", lambda e: button1.configure(bg = "white", fg = "black"))
button1.focus_set() #Setting default focus to button1

button2 = Button(root, text = "Button2", font = ('Comic Sans', 15, 'bold'), bg = "white", fg = "black")
button2.grid(row = 0, column = 1, sticky = NSEW, ipadx = 5, ipady = 2, padx = 5, pady = 5)
button2.bind("<FocusIn>", lambda e: button2.configure(bg = "black", fg = "white"))
button2.bind("<FocusOut>", lambda e: button2.configure(bg = "white", fg = "black"))
button2.bind("<Left>", on_left)

root.mainloop()

Button1 有焦點

在此處輸入圖像描述

Button2 有焦點

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM