如何在Tkinter中有效地处理按钮状态

时间:2010-11-13 12:11:09

标签: python button tkinter state

我做了一些搜索,但我找不到任何关于这个主题的内容。也许是因为它是常见的程序员知识(我不是程序员,我从必要性中学到的),或者因为我的方法是错误的。

我想了解如何管理GUI的按钮状态的想法/建议。例如,如果我有一个允许用户导入和处理数据的程序,那么在成功导入数据之前某些功能应该是不可访问的,或者如果他们想要绘制某些数据,他们需要选择要绘制的数据。点击“图表”或“导出”按钮。即使在我建立的简单程序中,这些关系似乎也很快变得复杂。看起来很简单“用户不应该在'B'和'C'完成之前按下'A'按钮,如果按钮'D'或'取消'按钮,则应该禁用'A'。但是跟踪一个按钮有很多。到目前为止,我尝试了两件事:

  • 更改/检查按钮的回调函数中的按钮状态。所以在上面的例子中,我将在按钮B和C的回调中使用代码来检查是否应该启用A.在按钮D和取消的回调中,我将使用代码来禁用按钮A.这会很快变得复杂,并且在代码更改时难以维护。

  • 在每个按钮回调中设置布尔变量(或者稍后使用cget()检查状态)并检查轮询函数中的变量以确定应启用或禁用哪些按钮。

我只是不确定。我想让代码尽可能简短易懂(以后容易编辑),但我不喜欢每隔几百毫秒轮询所有按钮状态的想法,仅用于按钮“管理”。您可以将相同的想法扩展到复选框,菜单项等...但我想在这里做其他人已经完成的工作以及他们为什么这样做。

1 个答案:

答案 0 :(得分:1)

您只是根据事件更改按钮状态,对吧?没有理由“轮询”以查看按钮状态是否已更改。你可以做的是构建一个函数,它为你完成所有的调用,然后用disable_buttons([okButton, graphButton, printButton])之类的函数调用它。当发生修改相应用户界面选项(例如导入数据)的事件时,请使用另一个启用它们的功能:enable_buttons([graphButton])。当然,您可以使用每个对象的方法执行此操作,但制作包装器可以使您在整个应用程序中保持一致。