【发布时间】:2021-10-04 17:37:24
【问题描述】:
当用户按下其中任何一个时,如何让多个 tkinter 按钮同时按下?
要清楚,我希望多个 tkinter 按钮看起来像用户同时按下其中任何一个按钮。
我试过这个:
from tkinter import *
from tkinter import ttk
class one_for_all:
def __init__(self):
self.root = Tk()
self.root.title("One For All, All For One")
self.frame = ttk.Frame(self.root, padding="3 3 12 12")
self.frame.grid(row=0, column=0)
self.root.rowconfigure(0, weight=1)
self.root.columnconfigure(0, weight=1)
self.btn1 = ttk.Button(self.frame, text="btn1", command=lambda : self.push_all(1))
self.btn2 = ttk.Button(self.frame, text="btn2", command=lambda : self.push_all(2))
self.btn3 = ttk.Button(self.frame, text="btn3", command=lambda : self.push_all(3))
self.btn4 = ttk.Button(self.frame, text="btn4", command=lambda : self.push_all(4))
self.btn1.grid(row=0, column=0, sticky="nsew")
self.btn2.grid(row=0, column=1, sticky="nsew")
self.btn3.grid(row=1, column=0, sticky="nsew")
self.btn4.grid(row=1, column=1, sticky="nsew")
for child in self.frame.winfo_children():
child.grid_configure(padx=5, pady=5)
def push_all(self, caller):
if caller != 1:
self.btn1.configure(command=lambda : None)
self.btn1.event_generate("<ButtonPress-1>")
self.btn1.event_generate("<ButtonRelease-1>")
self.btn1.configure(command=lambda: self.push_all(1))
if caller != 2:
self.btn2.configure(command=lambda : None)
self.btn2.event_generate("<ButtonPress-1>")
self.btn2.event_generate("<ButtonRelease-1>")
self.btn2.configure(command=lambda: self.push_all(2))
if caller != 3:
self.btn3.configure(command=lambda : None)
self.btn3.event_generate("<ButtonPress-1>")
self.btn3.event_generate("<ButtonRelease-1>")
self.btn3.configure(command=lambda: self.push_all(3))
if caller != 4:
self.btn4.configure(command=lambda : None)
self.btn4.event_generate("<ButtonPress-1>")
self.btn4.event_generate("<ButtonRelease-1>")
self.btn4.configure(command=lambda: self.push_all(4))
def mainloop(self):
self.root.mainloop()
if __name__ == "__main__":
one_for_all().mainloop()
但看起来只有按钮 4 受到其他按钮的刺激,而不是全部 4 :( 注意:我刚刚启动 tkinter,没有任何 GUI 经验
提前致谢。
【问题讨论】: