【问题标题】:How to handle button states efficiently in Tkinter如何在 Tkinter 中有效地处理按钮状态
【发布时间】:2010-11-13 12:11:09
【问题描述】:

我进行了几次搜索,但找不到有关此主题的任何内容。也许是因为它是常见的程序员知识(我不是程序员,我是从必要中学到的),或者因为我走错了路。

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

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

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

我只是不确定这一点。我想让代码尽可能简短和易于理解(并且以后易于编辑),但我不喜欢每隔几百毫秒轮询所有按钮状态只是为了按钮“管理”的想法。您可以将相同的想法扩展到复选框、菜单项等……但我想在这里说明其他人所做的事情以及他们这样做的原因。

【问题讨论】:

    标签: python button tkinter state


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      相关资源
      最近更新 更多