适合人群

  • 刚接触python
  • 刚接触gui图像界面
  • 需要简单的编程例子
  • 这个代码示例是一个很好的tkinter入门项目,展示了如何创建窗口、添加控件、处理事件和进行基本的布局管理。

涉及

  • Tkinter基础:包括窗口创建、控件布局和事件处理。
  • 逻辑运算:实现计算器的核心功能,如加减乘除等。

详细技术

  • tkinter库
  • 布局管理:使用grid布局管理器来排列窗口中的控件
  • 全局变量:使用global关键字来声明全局变量
  • 匿名函数(Lambda表达式):在循环中创建按钮时,使用了lambda表达式来创建匿名函数,允许为每个按钮绑定不同的参数。
  • 字符串操作
  • 异常处理
  • 事件处理:为按钮点击定义了operate函数,根据不同的按钮执行不同的操作,如计算结果、清空输入框、取相反数等。

代码讲解


1.导入Tkinter库

import tkinter as tk

导入Python的标准GUI库Tkinter,用于创建图形用户界面。


2.全局变量定义

box = ""

定义了一个全局变量box,用于存储计算器的当前表达式,以便后续操作。


3.Demo函数定义

def Demo(window):

定义了一个Demo函数,它接受一个参数window,即主窗口对象。


4.按钮列表和布局

btn_list = ["C", "(", ")", "/",
            "7", "8", "9", "*",
            "4", "5", "6", "-",
            "1", "2", "3", "+",
            "+/-", "0", ".", "=",
            "上"]
row = 1
column = 0
for b in btn_list:
    button = tk.Button(window, text=b, width=5, command=(lambda x=b: operate(x)))
    button.grid(row=row, column=column, padx=3, pady=6)
    column += 1
    if column > 3:
        column = 0
        row += 1

这段代码定义了一个按钮列表btn_list,包含计算器的所有按钮。然后通过循环创建按钮,并使用grid布局管理器将它们放置在窗口中。


5.输入框定义

entry = tk.Entry(window, width=50)
entry.grid(row=0, column=0, columnspan=4, padx=3, pady=6)

创建了一个输入框entry,用于显示用户输入的表达式和计算结果。它被放置在窗口的第一行,跨越四个列


6. operate函数定义

def operate(key):

定义了operate函数,它根据用户点击的按钮执行相应的操作。


7. 按钮操作逻辑

以下是operate函数中的操作逻辑:

  • 等号键 (=)
if key == "=":
    try:
        result = eval(entry.get())
    except:
        result = "error"
    entry.insert(tk.END, " = " + str(result))
    box = entry.get()

当用户点击等号键时,尝试计算输入框中的表达式,并在输入框后显示结果。


  • 清除键 ©
elif key == "C":
    entry.delete(0, tk.END)

清除输入框中的所有内容。


  • 取相反数键 (+/-)
elif key == "+/-":
    if "=" in entry.get():
        entry.delete(0, tk.END)
    elif entry.get()[0] == "-":
        entry.delete(0)
    else:
        entry.insert(0, "-")

如果输入框中有等号,则清除输入框;如果第一个字符是负号,则删除它;否则,在开头添加负号。


  • 上一步键 (上):
elif key == "上":
    entry.delete(0, tk.END)
    entry.insert(tk.END, box)

将box中的内容重新插入到输入框中,实现上一步操作的功能。


  • 其他键
else:
    if "=" in entry.get():
        box = entry.get()
        entry.delete(0, tk.END)
    entry.insert(tk.END, key)

如果输入框中有等号,则更新box并清除输入框,然后插入新的键值


8.主程序入口

if __name__ == "__main__":
    window = tk.Tk()
    window.memory = "300x300"
    window.config(background="lightblue")
    Demo(window)
    window.mainloop()

这段代码是程序的主入口。它创建了一个Tkinter窗口,设置了窗口大小和背景颜色,然后调用Demo函数来初始化计算器界面,并通过mainloop方法启动事件循环。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐