✨✨✨
感谢优秀的你打开了小白的文章
“希望在看文章的你今天又进步了一点点,离美好生活更近一步!”🌈
前言
Python 使用 Tkinter 可以快速的创建 GUI 应用程序。我们可以用它来实现一个简易计算器。
大致是这种,调整行列之间的距离。
代码实例
from tkinter import *
from tkinter import messagebox
import random
class Application(Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.createWidget()
def createWidget(self):
"""通过grid布局实现计算器的界面"""
btnText = (("MC","M+","M-","MR"),
("C","±","/","✖️"),
(7,8,9,"-"),
(4,5,6,"+"),
(1,2,3,"="),
(0,"."))
Entry(self).grid(row=0,column=0,columnspan=4,pady=10)
for rindex,r in enumerate(btnText):
for cindex,c in enumerate(r):
if c == "=":
Button(self,text=c,width=2)\
.grid(row=rindex+1,column=cindex,rowspan=2,sticky=NSEW)
elif c == 0:
Button(self,text=c,width=2)\
.grid(row=rindex+1,column=cindex,columnspan=2,sticky=NSEW)
elif c == ".":
Button(self,text=c,width=2)\
.grid(row=rindex+1,column=cindex+1,sticky=NSEW)
else:
Button(self,text=c,width=2)\
.grid(row=rindex+1,column=cindex,sticky=NSEW)
if __name__ == '__main__':
root = Tk()
root.geometry("200x200+200+300")
app = Application(master=root)
root.mainloop()
运行结果:
上述的只是一个框架,若要实现功能
计算器页面
import tkinter
import tkinter.messagebox
import re
operators=('+','-','*','/','**','//')
def buttonClick(btn):
val=contentVar.get()
if val.startswith('.'):
val='0'+val
if btn in '0123456789':
val+=btn
elif btn=='.':
t=re.split(r'[\+|-|\*|/]',val)[-1]
if t in '.':
tkinter.messagebox.showerror('Error', 'Digits format error!')
return
else:
val+=btn
elif btn=='C':
val=''
elif btn=='=':
try:
val=str(eval(val)) #计算字符串表达式值
except:
tkinter.messagebox.showerror('Error','Expression error!')
return
elif btn in operators:
if val.endswith(operators):
tkinter.messagebox.showerror('Error', 'Format error!')
return
val+=btn
elif btn=='sqrt':
n=val.split('.')
if all(map(lambda x:x.isdigit(),n)):
val=eval(val)**0.5
else:
tkinter.messagebox.showerror('Error','Expression error!')
return
contentVar.set(val)
root=tkinter.Tk()
root.geometry('300x300+500+100')
root.resizable(False, False)
root.title('Calculator')
contentVar=tkinter.StringVar(root,'')
contentEntry=tkinter.Entry(root,textvariable=contentVar,bg='red')
contentEntry['state']='readonly'
contentEntry.place(x=10,y=10,width=280,height=50)
grids=['//','**','sqrt','C']+list('789+456-123*0./=')
t=0
for i in range(5):
for j in range(4):
btn=tkinter.Button(root,text=grids[t],command=lambda x=grids[t]:buttonClick(x))
btn.place(x=20+j*64,y=80+i*40,width=63,height=36)
t+=1
root.mainloop()
结果如下:
🚀往期回顾
📣GUI 图形用户界面编程(一): (278条消息) GUI 图形用户界面编程(一)_am_student的博客-CSDN博客
📣GUI 图形用户界面编程(二):
(278条消息) GUI 图形用户界面编程(二)经典案例_am_student的博客-CSDN博客
📣GUI 图形用户界面编程(三):
(278条消息) GUI 图形用户界面编程(三)基本框架与Label的使用_am_student的博客-CSDN博客
📣GUI 图形用户界面编程(四):
(278条消息) GUI 图形用户界面编程(四)-Button组件_am_student的博客-CSDN博客
📣GUI 图形用户界面编程(五):
(357条消息) GUI 图形用户界面编程(五)-登录页面_am_student的博客-CSDN博客
更多有趣的请关注公众号: