Python Tkinter:一种避免事件和值更新之间的竞争条件的简单方法? 问题

Python Tkinter:一种避免事件和值更新之间的竞争条件的简单方法? 问题,python,binding,tkinter,race-condition,Python,Binding,Tkinter,Race Condition,我的问题很简单,但即使在谷歌上搜索了一下,我也不知道如何轻松应对 所以我有一个选择按钮: self.but_val = IntVar() self.but = Checkbutton(frame, text="text", variable=self.but_val) 此复选按钮触发GUI上某些文件路径的更新: self.but.bind('<ButtonRelease-1>', lambda e: self.update_files_path(e), add='

我的问题很简单,但即使在谷歌上搜索了一下,我也不知道如何轻松应对

所以我有一个选择按钮:

self.but_val = IntVar()
self.but = Checkbutton(frame, text="text", variable=self.but_val)
此复选按钮触发GUI上某些文件路径的更新:

self.but.bind('<ButtonRelease-1>', 
        lambda e: self.update_files_path(e), add='+')
我遇到的问题是在clic之前获取按钮的值。 由于文件路径的处理取决于不同的按钮值,我不能只使用相反的值

我目前的工作 目前,我有一个在clic之前触发并保存GUI状态的函数:

self.but.bind('<ButtonPress-1>', lambda e,
    self.save_design_opts_state(self.buttons_to_backup,
        self.before_clic_vars_state), add='+')
这个函数很难实现,因为我需要做很多事情: 1-检查clic是否确实是在按钮上创建的(以避免clic从按钮开始并在其他位置结束!) 2-根据按钮类型获取所有必需按钮的值

有没有更简单的方法来处理这个问题?


谢谢你的帮助

不要设置自己的绑定。使用检查按钮的
命令
选项。通过此选项,可以指定值更改后要运行的命令。还有其他方法,但这是迄今为止最简单、最常见的解决问题的方法

我制作的教程没有说明
命令
可以用于不同的按钮类型。我只在经典的纽扣上用过。每次我有复选按钮或单选按钮时,我都使用
bind
方法。。。使用
命令
,我的代码将更加清晰和干净(经过大量返工…)。谢谢你的回答!
self.but.bind('<ButtonPress-1>', lambda e,
    self.save_design_opts_state(self.buttons_to_backup,
        self.before_clic_vars_state), add='+')
gui_state = self.get_gui_state(event)