python - Tkinter 将带参数的函数绑定(bind)到小部件

标签 python tkinter

我有一个 tkinter 框架和一个按钮:

from tkinter import *

def rand_func(a,b,c,effects):
    print (a+b+c)

root=Tk()
frame=Frame(root)
frame.bind("<Return>",lambda a=10, b=20, c=30: rand_func(a,b,c))
frame.pack()

button=Button(frame, text="click me", command=lambda a=1,b=2,c=3,eff=None:rand_func(a,b,c))
button.pack()

root.mainloop()

我希望在用户按下回车键和按下按钮时完成相同的功能。可悲的是,上面的代码在框架绑定(bind)处给出了一个错误。有谁知道这个问题的解决方案吗?

最佳答案

当您使用 bind 创建绑定(bind)时,Tkinter 会自动添加一个包含有关事件信息的参数。您需要在您的 rand_func 定义或您如何调用它时考虑到这一点。

当您使用 command 属性时,包含此参数。您必须在每种情况下如何调用函数或函数如何解释其参数时注意考虑这个额外的参数。

这是一种在绑定(bind)中使用 lambda 的解决方案,仅在使用 bind 命令时才接受额外事件,但不将其传递给最终命令。

import tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.frame = tk.Frame(self)
        self.frame.pack()
        self.button = tk.Button(self.frame, text="click me",
                             command=lambda a=1, b=2, c=3: 
                                self.rand_func(a, b, c))
        self.button.pack()
        self.frame.bind("<Return>", 
                        lambda event, a=10, b=20, c=30: 
                            self.rand_func(a, b, c))
        # make sure the frame has focus so the binding will work
        self.frame.focus_set()

    def rand_func(self, a, b, c):
        print "self:", self, "a:", a, "b:", b, "c:", c
        print (a+b+c)

app = SampleApp()
app.mainloop()

话虽如此,绑定(bind)到框架很少是正确的做法。通常一个框架不会有键盘焦点,除非它有焦点,否则绑定(bind)永远不会触发。如果您正在设置全局绑定(bind),您应该绑定(bind)到“all”绑定(bind)标签(使用 bind_all 方法)或绑定(bind)到顶层小部件。

关于python - Tkinter 将带参数的函数绑定(bind)到小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7299955/

相关文章:

python - Pandas read_html 返回原始 HTML 内容[对于某些行/单元格/等]

python - re.findall 表现得很奇怪

python - 使工具提示文本像表格一样显示?

python - 销毁 tkinter 按钮

python - 在 Tkinter Text 小部件中突出显示整行长度

python - 使用分隔符 1 和索引 [0] 与其他分隔字符串

jquery - 如何将搜索到的单词保留在第二个结果页面上

python - 登录系统时运行 Python 脚本? [xubuntu 15.04]

python - NoneType 对象的方法属性

python - 使用 python 3 和 tkinter 中的 colorchooser 更改 tkinter 窗口中文本的颜色