2010-11-13 41 views
0

我已经完成了一些搜索,但是找不到任何关于此主题的内容。也许是因为它是常见的程序员知识(我不是程序员,我已经从必要性中学到了知识),或者因为我错误地去了解它。如何在Tkinter中有效地处理按钮状态

我想就如何管理GUI的按钮状态提出意见/建议。例如,如果我有一个允许用户导入和处理数据的程序,那么某些功能应该是无法访问的,直到数据成功导入,或者如果他们想要绘制某些数据,他们需要选择要绘制的数据点击'图表'或'导出'按钮。即使在我构建这些关系的简单程序中,似乎很快就会变得复杂。看起来很简单,“用户不应该能够点击'A'按钮直到'B'和'C'完成,然后'A'应该被禁用,如果按钮'D'或'取消'按钮。这是很多来跟踪一个按钮到目前为止,我已经试过两件事情:

  • 更改/在按钮的回调函数检查按钮状态,以便在上面的例子中,我将不得不代码。按钮B和C的回调来检查是否应该启用A,并且在按钮D和Cancel的回调中,我将有代码禁用按钮A.这会变得很复杂并且很难在代码更改时保持不变。在每个按钮回调(或只是稍后使用cget()检查状态并检查轮询函数中的变量以确定应启用或禁用哪些按钮。

我只是不确定这一点。我希望代码尽可能简短易懂(稍后易于编辑),但我不喜欢每隔几百毫秒轮询所有按钮状态的想法,只是为了管理按钮。您可以将相同的想法扩展到复选框,菜单项等等,但是我想在这里介绍其他人做了什么,以及他们为什么要按照他们的方式来做。

回答

1

你只是根据事件改变按钮状态,对吧?没有理由'轮询'以查看按钮状态是否已经改变。你可以做的是建立一个功能,它可以完成所有的呼叫,然后用disable_buttons([okButton, graphButton, printButton])这样的名称来呼叫它。当发生修改相应用户界面选项(如导入数据)的事件时,请使用另一个功能将其打开:enable_buttons([graphButton])。当然,您可以使用每个对象的方法来做到这一点,但是使用包装器可以让您在整个应用程序中保持一致。

相关问题