我不知道从我找到的代码中单击计算器上的按钮时执行事件是如何工作的

问题描述 投票:0回答:1

我在 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行,出现了方法,但不知道为什么没有括号。 有人可以给我解释一下吗?

python button calculator
1个回答
0
投票

理解源代码的最佳方法是查看文档(或者在这种情况下,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

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.