为什么在函数中使用时Tkinter Button返回None?

时间:2020-09-17 20:19:21

标签: python python-3.x tkinter

我正在制作一个GUI Hangman,每个字母做了26个按钮。我想在按下按钮时禁用按钮,但似乎无法从函数中调用变量。

这是一个示例按钮:

self.letter_n = tk.Button(self, text="n", command=lambda: self.take_guess("n"), width=2, height=2).place(x=450, y=400, anchor="center") # Letter "n" (Button)

我尝试执行此操作,但是出于某些原因,button返回了None

def take_guess(self, letter):
    button = getattr(self, f"letter_{letter}")
    button.configure(state="disabled")

我还试图为每个字母和变量制作一个字典,如下所示:

self.dict_of_letters = {"a": self.letter_a,
                    "b": self.letter_b} # And so on...

并在这样的函数中使用它,但它仍返回None

def take_guess(self, letter):
    button = self.dict_of_letters[letter]

有人可以帮助我吗?这真的很烦人,我不确定该怎么做... 我很乐意提供更多信息。

1 个答案:

答案 0 :(得分:3)

在函数链接中,链中最右函数的返回值分配给该变量。例如,在

var = foo().bar().baz()

var分配了从baz()返回的任何内容。在您的示例中,您不仅使用tk.Button()创建了一个按钮实例,还调用了它的place()函数。 tk.Button()返回一个按钮对象,但是place()仅返回None

解决方案是创建所有按钮实例,将它们存储在列表或字典中,然后遍历所有按钮实例以place()