[英]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.