Skip to main content
 首页 » 编程设计

python之使用 tkinter 时,为什么要使用 "indirect"回调

2025年05月04日24davidwang456

我正在努力提高我的 Python 和 tkinter 技能。此刻我正在阅读一本关于 tkinter 的书。我注意到在面向对象的 GUI 应用程序中,作者以这种方式定义按钮回调:

def on_fast_forward_button_clicked(self): 
    self.player.fast_forward() 
 
def on_rewind_button_clicked(self): 
    self.player.rewind() 

因此,如果我理解正确的话,我们正在为应用程序类中的每个按钮编写方法。一个带有“间接”回调,只调用事件,另一个带有预期操作本身,由前一个回调调用。为什么我们要写这样的代码,而不是只使用一个方法?

请您参考如下方法:

没有具体原因,在你举的例子中我绝对不会那样做。

这真的很简单:一般来说,每个按钮都应该与一个功能相关联。就是这样。这是规则。该功能的作用完全取决于您。

如果它所做的只是一件事情,那么它没有理由不能直接调用那件事情。如果它需要做不止一件事,请创建一个特殊用途的函数来完成按钮应该做的所有事情,并让该按钮调用该函数。

话虽如此,“响应按钮”和“执行操作”之间存在概念上的差异。例如,您可能有两种或三种方法来执行快进功能:您可能有菜单栏上的命令、右键单击菜单上的命令、专用的快进按钮和键盘加速器。

根据它们的实现方式,它们调用的函数可能需要也可能不需要额外参数(例如:绑定(bind)到事件的函数总是获得一个事件对象)。在这种情况下,通常更容易使用旨在响应事件的专用函数,并且该专用函数调用更通用的 fast_forward 函数。

归根结底,一切都与清晰度有关。如果您认为让一个函数执行两个角色(快进和响应按钮单击)会使程序更容易理解,那么一定要这样做。