好的,以下是一个简单的 Python Tkinter 实现计算器的示例代码,您可以参考:
```python
import tkinter as tk
class Calculator:
def __init__(self):
self.current = ""
self.result = 0
self.operator = ""
self.reset = False
def add_digit(self, digit):
if self.reset:
self.clear()
self.current += str(digit)
def add_decimal(self):
if self.reset:
self.clear()
if "." not in self.current:
self.current += "."
def add_operator(self, operator):
if self.reset:
self.operator = operator
self.reset = False
else:
self.calculate()
self.operator = operator
self.result = float(self.current)
self.current = ""
def calculate(self):
if self.operator == "+":
self.result += float(self.current)
elif self.operator == "-":
self.result -= float(self.current)
elif self.operator == "*":
self.result *= float(self.current)
elif self.operator == "/":
self.result /= float(self.current)
self.operator = ""
self.current = str(self.result)
self.reset = True
def clear(self):
self.current = ""
self.result = 0
self.operator = ""
self.reset = False
class CalculatorApp(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.parent = parent
self.calculator = Calculator()
self.current_label = tk.Label(self.parent, text="0", font=("Helvetica", 20))
self.current_label.grid(row=0, column=0, columnspan=4, sticky="nsew")
buttons = [
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"0", ".", "=", "+"
]
self.buttons = []
for i in range(len(buttons)):
button = tk.Button(self.parent, text=buttons[i], font=("Helvetica", 16), command=lambda x=buttons[i]: self.button_click(x))
button.grid(row=i//4+1, column=i%4, sticky="nsew")
self.buttons.append(button)
self.parent.grid_columnconfigure(0, weight=1)
self.parent.grid_rowconfigure(0, weight=1)
for i in range(1, 5):
self.parent.grid_rowconfigure(i, weight=1)
self.parent.grid_columnconfigure(i-1, weight=1)
def button_click(self, button):
if button in "0123456789":
self.calculator.add_digit(button)
self.current_label.configure(text=self.calculator.current)
elif button == ".":
self.calculator.add_decimal()
self.current_label.configure(text=self.calculator.current)
elif button in "+-*/":
self.calculator.add_operator(button)
elif button == "=":
self.calculator.calculate()
self.current_label.configure(text=self.calculator.current)
elif button == "C":
self.calculator.clear()
self.current_label.configure(text=self.calculator.current)
if __name__ == "__main__":
root = tk.Tk()
root.title("Calculator")
app = CalculatorApp(root)
app.grid(sticky="nsew")
root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(0, weight=1)
root.mainloop()
```
在这个示例中,我们创建了一个 Calculator 类来处理所有计算逻辑,并创建了一个 CalculatorApp 类来创建用户界面。在用户界面中添加了一个 Label 来显示当前输入和计算结果,并在每个按钮上绑定一个回调函数来处理用户的输入。当用户按下“等号”时,计算器将计算结果并在屏幕上显示。当用户按下“C”按钮时,计算器将重置并返回默认状态。
您可以运行这个代码来查看它的效果,然后根据您的需求进行修改和扩展。