【Python】Tkinter库实现GUI界面计算器
1、概述
Tkinter库是一个可以制作和生成GUI界面的库,适合我们日常开发一些桌面工具,有了它我们的工作将会更加遍历,GUI界面避免了我们想使用带界面的工具,有不想画长时间去开发的过程。
Tkinter库内部包含了像文本、单选按钮、文本框、文本域、图片上传、多选按钮、菜单、提示框、滚动条等多种控件,内部包含了pack、grid、place三种方便我们规范控件位置的布局方式,非常适合小白入手,简单的几个代码就可以实现界面效果。
下面是作者个人写的第一个GUI项目,一个带界面的计算器,下面附上代码,喜欢的话小伙伴们可以获取,别忘了给作者点个赞哈!
2、代码展示
计算器实现了几个功能
- 数字的加、减、乘、除、平方
- 对内容的求值、整数格式化,小数保留9位、退格、清空等功能
#首先需要安装pyinstall库
#在cmd命令行运行以下命令
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstall
接下来我们看代码部分
import tkinter as tk
from tkinter import messagebox
import reroot = tk.Tk()root.title('简易计算器')
root.geometry('400x500')root.resizable(False, False)
# 创建顶部文本框
# width=文本框宽度
# font=("字体",字号)
# state="disabled":文本框只读,normal为可写入
ent = tk.Entry(root,width=18,font=("Arial",30),state="normal")#30字号最多可写17个字
ent.grid(row=0,column=0,columnspan=4,padx=5,pady=20)lis = ["清空","退格","平方","待定","7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"]# 处理数据显示函数
def click(entry,event):if event == "退格":entry.delete(len(entry.get()) - 1)elif event == "清空":entry.delete(0,tk.END)elif event == "平方":entry.insert(tk.END,"^")elif event == "待定":passelif len(entry.get()) >= 17:messagebox.showinfo(title="信息", message="输入位数已达上限!")else:if event == "=":result(entry)else:# e = entry.get()entry.insert(tk.END, event)# print(val)#计算结果函数
def result(entry):sas = entry.get().replace("^","**")try:# 获取文本框中的值# eval(值)函数,将字符串运算值转化为数字运算,例如"7+5"转为7+5=12val = eval(sas)except Exception as e:messagebox.showerror(title="出错了",message=f"运算错误!{e}")else:# print(str(val)[-2::])# 获取最后两位,判断是不是.0,如果是,则他为可以化成整数的小数,反之则保留小数endflag = str(val)[-2::]if endflag == ".0":# 若为.0结尾,则将其转为整数val = int(val)else:# 若是小数,则保留9位小数val = round(val,9)# passentry.delete(0,tk.END)entry.insert(tk.END,val)# 设置列权重,平分剩余空间
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=1)
root.grid_columnconfigure(2, weight=1)
root.grid_columnconfigure(3, weight=5)
s = 0
# 外层循环控制行数
for i in range(1,6):# 内层循环控制列数for j in range(0,4):btn = tk.Button(root, text=f"{lis[s]}", width=10, height=4,font=("Arial",11),command=lambda idx=s:click(ent,lis[idx]))btn.grid(row=i, column=j, pady=0,sticky="ew")# 这个s是用来控制应该在按钮上渲染那个键的值s += 1root.mainloop()