如何在Tkinter中高效处理按钮状态
我查了一些资料,但没找到关于这个话题的内容。可能是因为这属于程序员的常识(我不是程序员,只是出于需要学了一些),或者我找的方法不对。
我想要一些关于如何管理图形界面(GUI)中按钮状态的想法或建议。例如,如果我有一个程序,允许用户导入和处理数据,那么在数据成功导入之前,某些功能应该是无法使用的;或者如果他们想要绘制某些数据,他们需要先选择要绘制的数据,然后才能点击“绘图”或“导出”按钮。即使在我构建的简单程序中,这些关系似乎也很快就变得复杂。说“用户在完成‘B’和‘C’之前不应该能点击按钮‘A’,然后如果点击了按钮‘D’或‘取消’按钮,‘A’应该被禁用”听起来简单,但要管理一个按钮却涉及很多内容。到目前为止,我尝试了两种方法:
在按钮的回调函数中更改/检查按钮状态。比如在上面的例子中,我会在按钮B和C的回调中写代码来检查按钮A是否应该被启用。而在按钮D和取消的回调中,我会写代码来禁用按钮A。这很快就变得复杂,而且随着代码的变化,维护起来也很困难。
在每个按钮的回调中设置布尔变量(或者稍后使用cget()检查状态),然后在一个轮询函数中检查这些变量,以确定哪些按钮应该被启用或禁用。
我对此不是很确定。我想让代码尽可能简短和易于理解(并且以后容易编辑),但我不喜欢每几百毫秒就轮询所有按钮状态来进行“按钮管理”的想法。这个想法也可以扩展到复选框、菜单项等,但我想听听其他人是怎么做的,以及他们为什么这样做。
1 个回答
你只是根据事件来改变按钮的状态,对吧?其实没有必要去“轮询”按钮状态是否改变。你可以写一个函数,专门负责这些调用,然后用类似 disable_buttons([okButton, graphButton, printButton])
的方式来调用它。当发生某个事件,比如导入数据,改变了用户界面的选项时,可以再写一个函数来启用这些按钮:enable_buttons([graphButton])
。当然,你也可以用每个对象的方法来实现这些功能,但写一个包装函数可以让你的应用保持一致性。