我在 Github 上找到了这个计算器代码,想知道点击按钮时它是如何执行事件的。 代码中出现了“button_click”方法,但我不明白它是如何工作的。
import tkinter as tk
root = tk.Tk()
root.title("Simple Calculator")
entry = tk.Entry(root, width=30, borderwidth=5)
entry.grid( columnspan=5, padx=10, pady=10)
# These variables are used to keep track of the current row and column numbers
# when placing buttons in the grid layout.
row_num = 1
col_num = 0
buttons = [
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"0", ".", "=", "+",
"C"
]
def button_click(event):
text = event.widget.cget("text")
if text == "=":
try:
result = eval(entry.get())
entry.delete(0, tk.END) # tk. END refers to the position after the existing text
entry.insert(tk.END, str(result))
except Exception as e:
entry.delete(0, tk.END)
entry.insert(tk.END, "Error")
elif text == "C":
entry.delete(0, tk.END)
else:
entry.insert(tk.END, text)
for button_text in buttons:
button = tk.Button(root, text=button_text, padx=20, pady=10)
button.grid(row=row_num, column=col_num, padx=5, pady=5)
button.bind("<Button-1>", button_click)
col_num += 1
if col_num > 3:
col_num = 0
row_num += 1
root.mainloop()
第40行,出现了方法,但不知道为什么没有括号。 有人可以给我解释一下吗?
理解源代码的最佳方法是查看文档(或者在这种情况下,tkinter 教程可能会更好)。您询问的是第 40 行,该行调用
bind()
对象的 button
函数。 button
是 tkinter.Button
的一个实例。这是提到 bind()
部分的确切链接。
如果您不熟悉事件绑定的一般概念,它指的是当您将函数(或事件)连接(或绑定)到用户操作时——通常是单击按钮或按键。
您提到该函数不带括号。函数名后面的括号表示调用该函数。但在 Python 中,函数是“一流的”。它们是像其他所有对象一样的对象,因此您可以像对待任何其他对象一样对待函数 - 通过将其分配给变量,将其传递给另一个函数,从另一个函数返回它,或将其存储在数据结构中。第 40 行将 button_click
函数本身作为参数传递给
bind()
。以下是 Python 中函数的示例:
def double(x):
return x*2
# assign function to variable
twice = double
twice(3) # returns 6
# pass function as parameter
def print_results(f, value)
result = f(value)
print(result)
return result
print_results(double, 5) # prints and returns 10