【问题标题】:Properly assigning a function with arguments to a button in Tkinter正确地将带有参数的函数分配给 Tkinter 中的按钮
【发布时间】:2023-03-10 17:15:01
【问题描述】:

我有两个文件:

functions.py

import tkinter as tk

class funcs():
    def func1(entry):
        entry.delete(0, tk.END)

ma​​in.py

import tkinter as tk
import functions as f

root = tk.Tk()

entrybox = tk.Entry(master=root).grid()
button = tk.Button(master=root, command=f.funcs.func1(entrybox)).grid()

root.mainloop()

在 main.py 中,我已将带有参数 entrybox 的命令 func1 分配给小部件 button . 我的意图是让 entry 参数代表我想要操作的条目小部件。

这行代码坏了:

button = tk.Button(master=root, command=f.funcs.func1(entrybox)).grid()

问题是当我运行程序时,该函数立即调用并且没有分配给按钮。

我正在寻找一种将带参数的函数分配给 tkinter 中的按钮的方法。

【问题讨论】:

  • 您还有 1 个问题(除了答案中列出的问题)。您需要将entrybox = tk.Entry(...).grid() 拆分为entrybox = tk.Entry(...) 和entrybox.grid()

标签: python python-3.x tkinter


【解决方案1】:

您可以使用匿名函数:

tk.Button(
    master=root,
    command=lambda: f.funcs.func1(entrybox)
)

【讨论】:

  • 您可能要补充说 OP 的 entrybox = tk.Entry(...).grid() 也是不正确的。 This 是它背后的原因
【解决方案2】:

Python 将断行的代码识别为立即调用,所以你必须做 lambda:

button = tk.Button(master=root, command=lambda: f.funcs.func1(entrybox)).grid()

据我所知,这将解决问题。

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 2016-11-30
    相关资源
    最近更新 更多