📜  Python - 使用 Tkinter 模块的动态 GUI 计算器(1)

📅  最后修改于: 2023-12-03 14:45:53.530000             🧑  作者: Mango

Python - 使用 Tkinter 模块的动态 GUI 计算器

简介

本文将介绍如何使用 Python 的 Tkinter 模块创建一个简单的 GUI 计算器。这个计算器能够进行基本的数学运算如加、减、乘、除、取余数、开根号,并能够在一个文本框中显示结果。

GUI 界面

我们将使用 Tkinter 模块来创建计算器的用户界面。界面包括一个顶层框架、一个顶部框架、一个文本框(用于显示结果)、一个数字键盘和一个操作键盘。

import tkinter as tk

class Calculator:
    def __init__(self, master):
        self.master = master
        self.master.title("动态 GUI 计算器")
        self.master.geometry("340x300")
        
        # 创建一个框架
        top_frame = tk.Frame(self.master)
        top_frame.pack(side=tk.TOP)
        
        # 在框架中添加一个文本框
        self.display = tk.Entry(top_frame, font=('Arial', 25), width=15, justify='right')
        self.display.pack(side=tk.TOP)
        
        # 创建一个按钮框架
        button_frame = tk.Frame(self.master)
        button_frame.pack(side=tk.TOP)
        
        # 在按钮框架中添加数字按钮
        self.add_button(button_frame, '7')
        self.add_button(button_frame, '8')
        self.add_button(button_frame, '9')
        self.add_button(button_frame, '4')
        self.add_button(button_frame, '5')
        self.add_button(button_frame, '6')
        self.add_button(button_frame, '1')
        self.add_button(button_frame, '2')
        self.add_button(button_frame, '3')
        self.add_button(button_frame, '0')
        self.add_button(button_frame, '.')
        
        # 创建一个操作按钮框架
        operation_frame = tk.Frame(self.master)
        operation_frame.pack(side=tk.TOP)
        
        # 在操作按钮框架中添加操作按钮
        self.add_button(operation_frame, '+')
        self.add_button(operation_frame, '-')
        self.add_button(operation_frame, '*')
        self.add_button(operation_frame, '/')
        self.add_button(operation_frame, '%')
        self.add_button(operation_frame, '√')
        self.add_button(operation_frame, 'AC')
        self.add_button(operation_frame, '=')
    
    # 辅助函数 - 构造 button
    def add_button(self, parent, label):
        tk.Button(parent, text=label, font=('Arial', 20), width=5, height=2,
                  command=lambda: self.button_click(label)).pack(side=tk.LEFT, padx=5, pady=5)
    
    # 当按钮被点击时要执行的函数
    def button_click(self, label):
        if label == 'AC':
            self.display.delete(0, tk.END)
        elif label == '=':
            try:
                result = eval(self.display.get())
                self.display.delete(0, tk.END)
                self.display.insert(tk.END, result)
            except:
                self.display.delete(0, tk.END)
                self.display.insert(tk.END, "错误")
        elif label == '√':
            try:
                result = eval('sqrt(' + self.display.get() + ')')
                self.display.delete(0, tk.END)
                self.display.insert(tk.END, result)
            except:
                self.display.delete(0, tk.END)
                self.display.insert(tk.END, "错误")
        else:
            self.display.insert(tk.END, label)
计算器运算

计算器的数学运算通过 Python 的 eval() 函数来实现。 eval() 函数用于计算存储在字符串中的表达式,然后返回表达式的值。eval() 函数会执行字符串中的数学运算,并将结果返回。

以下代码演示如何使用 eval() 函数计算表达式 "2+3" :

result = eval("2+3")
print(result)  # 输出 5
参考资料