-1

我正在尝试创建一个更改标签文本的按钮,我觉得它应该可以正常工作,但是我分配给按钮命令的功能在我按下按钮之前就被调用了,为什么会发生这种情况,我有什么可以做的吗做什么来修复它?

这是我的代码:

import tkinter as tk

def changeLabelText(my_label, new_text):
    my_label.config(text = new_text)

root = tk.Tk()
root.geometry("500x500")

label = tk.Label(root, text = "Old Text", font = ("font", 30))
label.grid(row = 0)

changeTextButton = tk.Button(root, text = "Click to change label text",
                             command = changeLabelText(label, "New Text"))
changeTextButton.grid(row = 1)

tk.mainloop()
4

3 回答 3

1

使用 lambda 将变量传递给回调。

command = lambda: changeLabelText(label, "New Text"))
于 2020-08-06T12:24:05.673 回答
0

您不是传递函数,而是调用它并传递它返回的内容。您可以通过省略括号来传递不带参数的函数

command = func

或者您可以使用 lambda:

command = lambda: changeLabelText(label, "New Text")
于 2020-08-06T12:33:08.753 回答
0

您应该使用lambdafor 回调。它允许为命令参数创建小的内联函数。lambda 函数是 Python 中的匿名函数。您可以阅读更多相关信息:https ://www.w3schools.com/python/python_lambda.asp

这意味着您应该将此参数更改command = changeLabelText(label, "New Text")为 this command=lambda: changeLabelText(label, "New Text")

完整代码:

import tkinter as tk


def changeLabelText(my_label, new_text):
    my_label.config(text=new_text)


root = tk.Tk()
root.geometry("500x500")

label = tk.Label(root, text="Old Text", font=("font", 30))
label.grid(row=0)

changeTextButton = tk.Button(
    root, text="Click to change label text", command=lambda: changeLabelText(label, "New Text")
)
changeTextButton.grid(row=1)

tk.mainloop()

“点击前”图形用户界面:

前

“点击后”界面:

后

于 2020-08-06T13:00:57.117 回答