使用 tkinter 时,为什么要使用“间接”回调?

维克多·多明戈斯

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

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

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

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

布莱恩奥克利

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

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

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么需要使用 promise 作为异步回调的包装器

使用Tkinter时的Namerror

为什么使用类时 Tkinter bind() 返回错误?

为什么要使用双重间接?或为什么使用指向指针的指针?

当您可以在 Javascript 中全局调用函数时,为什么要使用回调?

当我可以简单地调用它们时,为什么要使用回调函数?

如何使用Tkinter正确构造按钮回调?

tkinter中的命令何时使用lambda和回调

使用tkinter.after将参数传递给回调

javascript-寻求令人满意的解释,为什么在回调中需要使用匿名函数包装器

使用Tkinter创建Fireworks

使用货币的 Python Tkinter

使用 Tkinter 'scrollbar' 可行

使用TkInter的简单窗口

在Tkinter中使用OpenCV

使用Python的Tkinter

使用Tkinter设置变量

使用 tkInter 选择页面

在 tkinter 中使用 After

使用Tkinter的Python代码

使用 Tkinter 的 Python 测验

使用 Tkinter 从 Messagebox 复制

为什么仅在python模块使用cv.imshow()时才执行C#回调?

为什么在使用register_shutdown_function()时我的“关闭回调”无效?

在tkinter中,为什么使用零填充时IntVar / Entry的组合返回错误的整数?

为什么在使用Label和.place()时,tkinter根背景没有设置为BMP图像?

为什么在使用StringVar而不是IntVar时,Tkinter的单选按钮全部开始选中?

尝试使用tkinter制作多个窗口时,为什么会收到错误消息?

为什么在使用.winfo_exists(tkinter)时出现未定义错误