【发布时间】:2017-12-20 09:34:15
【问题描述】:
我正在尝试按需调用默认的小部件行为。基于this answer,我对绑定标签和标签列表有所了解。
假设我有两个按钮,并且我希望在其标记列表中的特定项目的第一个按钮上具有绑定标记行为,每当我左键单击右侧按钮时:
import tkinter as tk
root = tk.Tk()
first_btn = tk.Button(root, text="1st")
second_btn = tk.Button(root, text="2nd")
second_btn.bind("<Button-1>", "expect the bindtag operation here")
first_btn.pack()
second_btn.pack()
root.mainloop()
我没有为first_btn 指定command=...,因为我需要具有按钮推送的效果,例如使用我的second_btn 绑定。
或者作为另一个例子,我想让second_btn 调用first_btn 的所有(最好是我选择的)绑定标签回调:
import tkinter as tk
root = tk.Tk()
first_btn = tk.Button(root, text="1st")
second_btn = tk.Button(root, text="2nd", command="first_btn bindtag callbacks")
first_btn.pack()
second_btn.pack()
root.mainloop()
或者,附加到绑定标签的操作的引用名称(如果有的话)是什么?
【问题讨论】:
-
我想做一个小部件默认做的任何事情。就像我想看到
first_btn在我左键单击second_btn时被推入和退出一样。 -
有
first_btn.event_generate('<...>')触发给定事件。 -
“动画行为”取决于事件,无论这些事件与哪些标签相关联。您可以轻松地
event_generate一系列<Button-1>和<ButtonRelease-1>事件,在“动画”点击之间存在时间延迟。一个粗略的解释是,在tk的引擎盖下为这些事件设置动画,每个事件调用一个相关的函数(分别为tkButtonDown和tkButtonUp)。因此,使用relief在没有任何事件且没有任何“变通”的情况下为点击设置动画的唯一方法是直接调用tkButtonInvoke函数(root.tk.call('::tk::ButtonInvoke', second_btn))。 -
同样适用于所有小部件!例如,您可以看到
Menu和“Alt-keys”的交互如何绑定here(查找tk::TraverseToMenu函数)。
标签: python tkinter binding tcl tk