题目:
计算器是一种较为常用的小工具,简单的计算器有10个数字键、小数点、四则运算符、退格、删除、清零等按钮,还要有显示区以及等号按钮,按键较多,如何排列得既漂亮美观又方便实用,需要仔细进行设计。请利用本节介绍的布局方法,实现下图所示的计算器界面的布局。
代码展示
from tkinter import *
import tkinter as tk
win = tk.Tk()
win.title("计算器")
win.geometry("300x300")
result_num = StringVar()
result_num.set("")
label = Label(win, width=25, height=2, anchor=SE, textvariable=result_num, relief="raised")
label.grid(row=0, column=0, columnspan=4, padx=5, pady=5)
Button(win, text="C", width=5, command=lambda: result_num.set("")).grid(row=1, column=0)
Button(win, text="DEL", width=5, command=lambda: result_num.set(result_num.get()[:-1])).grid(row=1, column=1)
Button(win, text="BCK", width=5, command=lambda: result_num.set(result_num.get()[:-1])).grid(row=1, column=2)
Button(win, text="/", width=5, command=lambda: result_num.set(result_num.get()+"/")).grid(row=1, column=3)
Button(win, text="7", width=5, command=lambda: result_num.set(result_num.get()+"7")).grid(row=2, column=0)
Button(win, text="8", width=5, command=lambda: result_num.set(result_num.get()+"8")).grid(row=2, column=1)
Button(win, text="9", width=5, command=lambda: result_num.set(result_num.get()+"9")).grid(row=2, column=2)
Button(win, text="*", width=5, command=lambda: result_num.set(result_num.get()+"*")).grid(row=2, column=3)
Button(win, text="4", width=5, command=lambda: result_num.set(result_num.get()+"4")).grid(row=3, column=0)
Button(win, text="5", width=5, command=lambda: result_num.set(result_num.get()+"5")).grid(row=3, column=1)
Button(win, text="6", width=5, command=lambda: result_num.set(result_num.get()+"6")).grid(row=3, column=2)
Button(win, text="-", width=5, command=lambda: result_num.set(result_num.get()+"-")).grid(row=3, column=3)
Button(win, text="1", width=5, command=lambda: result_num.set(result_num.get()+"1")).grid(row=4, column=0)
Button(win, text="2", width=5, command=lambda: result_num.set(result_num.get()+"2")).grid(row=4, column=1)
Button(win, text="3", width=5, command=lambda: result_num.set(result_num.get()+"3")).grid(row=4, column=2)
Button(win, text="+", width=5, command=lambda: result_num.set(result_num.get()+"+")).grid(row=4, column=3)
Button(win, text="0", width=5, command=lambda: result_num.set(result_num.get()+"0")).grid(row=5, column=0)
Button(win, text=".", width=5, command=lambda: result_num.set(result_num.get()+".")).grid(row=5, column=1)
Button(win, text="=", width=12, command=lambda: result_num.set(result_num.get()+"="+str(eval(result_num.get())))).grid(row=5, column=2, columnspan=2)
win.mainloop()
思路分析:
首先,我先按照图片上的计算机界面利用tkinter方面的知识设计了计算机界面,然后再添加具体的功能。
一.首先,需要导入tkinter包(注意,tkinter是内置的python模块,直接使用就可以)
import tkinter as tk #导入tkinter库
win = tk.Tk() #初始化根窗体实例
win.title("计算机") #窗口标题
win.geometry("800x600") #设置窗口大小
win.mainloop() #主事件循环
这一个代码块是创建tkinter界面必须要有的代码,每一行代码分别有其各自的作用
二.设置label文本框,以及button按钮(界面设计的核心部分)
label = Label(win, width=25, height=2, anchor=SE, textvariable=result_num, relief="raised")
label.grid(row=0, column=0, columnspan=4, padx=5, pady=5)
这写代码是创建Label,用于显示文本或图像,在Label显示我们要输入的数字以及运算的过程,width和hidth定义了文本框的高度及宽度,anchor是锚点位置,textvarible是事件绑定。
Button(win, text="DEL", width=5, command=lambda: result_num.set(result_num.get()[:-1])).grid(row=1, column=1)
Button(win, text="BCK", width=5, command=lambda: result_num.set(result_num.get()[:-1])).grid(row=1, column=2)
Button(win, text="/", width=5, command=lambda: result_num.set(result_num.get()+"/")).grid(row=1, column=3)
button的使用,这里用到了command,实现事件绑定,也就是点击这个按钮,会触发函数的执行,这里的函数是匿名函数(如图所示)。运用到了grid布局,按照行列的方式布局。
遇到的问题以及解决问题的方式:
遇到的问题就是就是事件的绑定,也就是command函数的使用,当点击按钮时就会触发函数的执行,事件绑定有三种使用方式,分别是command,bind,protocal,最常用的是command。这其中还用到了变量的传递,将控件的属性与变量进行绑定,一个变化另一个也会发生变化,这一部分我从课本上以及B站详细的学习了一下,才会设计计算器中变量的传递