Python:关于用tkinter制作一个简易计算机四则运算

本人最近在学习tkinter库的实例运用,于是简易做了一个计算机四则运算

为了引用简便

import tkinter as tk

1.先创建窗口实体并命名标题

root=tk.Tk()
root.title('calculator')

2.设置框架用于装入各种小组件

frame2用于装载计算键,计算显示数

frame1用于装载数字键和运算键

frame2=tk.Frame(root)
frame2.pack(padx=5,pady=5)

frame1=tk.Frame(root)
frame1.pack(padx=10,pady=10)

3.设置所需的变量

result1=tk.StringVar()
result2=tk.StringVar()

4.设置运算模式的变量

mode=0

5.先设置好按钮(这里用grid的布局更合适)

tk.Button(frame1,text='1',width=5,height=3,font=(20)).grid(row=1,column=1)
tk.Button(frame1,text='2',width=5,height=3,font=(20)).grid(row=1,column=2)
tk.Button(frame1,text='3',width=5,height=3,font=(20)).grid(row=1,column=3)

tk.Button(frame1,text='4',width=5,height=3,font=(20)).grid(row=2,column=1)
tk.Button(frame1,text='5',width=5,height=3,font=(20)).grid(row=2,column=2)
tk.Button(frame1,text='6',width=5,height=3,font=(20)).grid(row=2,column=3)

tk.Button(frame1,text='7',width=5,height=3,font=(20)).grid(row=3,column=1)
tk.Button(frame1,text='8',width=5,height=3,font=(20)).grid(row=3,column=2)
tk.Button(frame1,text='9',width=5,height=3,font=(20)).grid(row=3,column=3)

tk.Button(frame1,text='归零',width=5,height=3,font=(20)).grid(row=4,column=1)
tk.Button(frame1,text='0',width=5,height=3,font=(20)).grid(row=4,column=2)
tk.Button(frame1,text='.',width=5,height=3,font=(20)).grid(row=4,column=3)

tk.Button(frame1,text='x',width=5,height=3,font=(20)).grid(row=1,column=4)
tk.Button(frame1,text='/',width=5,height=3,font=(20)).grid(row=2,column=4)
tk.Button(frame1,text='+',width=5,height=3,font=(20)).grid(row=3,column=4)
tk.Button(frame1,text='-',width=5,height=3,font=(20)).grid(row=4,column=4)

注意row是行,column是列

如图

6.设置计算显示区域和计算键

tk.Label(frame2,textvariable=result1,fg='white',bg='black').grid(row=0,column=2)
tk.Label(frame2,textvariable=result1,fg='white',bg='black').grid(row=1,column=2)
tk.Button(frame2,text='计算',width=3,height=1,font=(20)).grid(row=2,column=2)

如图

7.定义cal函数

def cal(x):
    result1.set(result1.get()+x)

8.给数字按钮添加指令

command=lambda: cal('1')

9.设置好的数字按钮

tk.Button(frame1,text='1',width=5,height=3,font=(20),command=lambda: cal('1')).grid(row=1,column=1)
tk.Button(frame1,text='2',width=5,height=3,font=(20),command=lambda: cal('2')).grid(row=1,column=2)
tk.Button(frame1,text='3',width=5,height=3,font=(20),command=lambda: cal('3')).grid(row=1,column=3)

tk.Button(frame1,text='4',width=5,height=3,font=(20),command=lambda: cal('4')).grid(row=2,column=1)
tk.Button(frame1,text='5',width=5,height=3,font=(20),command=lambda: cal('5')).grid(row=2,column=2)
tk.Button(frame1,text='6',width=5,height=3,font=(20),command=lambda: cal('6')).grid(row=2,column=3)

tk.Button(frame1,text='7',width=5,height=3,font=(20),command=lambda: cal('7')).grid(row=3,column=1)
tk.Button(frame1,text='8',width=5,height=3,font=(20),command=lambda: cal('8')).grid(row=3,column=2)
tk.Button(frame1,text='9',width=5,height=3,font=(20),command=lambda: cal('9')).grid(row=3,column=3)

tk.Button(frame1,text='0',width=5,height=3,font=(20),command=lambda: cal('0')).grid(row=4,column=2)

10.按一下123键

如图

11.定义delet函数(用于归零)

def delet():
    result1.set('')
    result2.set('')

12.设置归零键和小数点键的按钮命令

tk.Button(frame1,text='归零',width=5,height=3,font=(20),command=lambda: delet()).grid(row=4,column=1)
tk.Button(frame1,text='.',width=5,height=3,font=(20),command=lambda: cal('.')).grid(row=4,column=3)

注:小数点的命令函数是cal(x),因此点击多次会出现多个小数点报错

13.定义vv(x)函数用于四则运算按钮(作者打算只用于运算模式设置,最终结果计算依赖于计算键的命令函数)

def vv(x):
    if result1.get()!='':
        result2.set(result1.get())
        result1.set('')
        global mode
        mode = x
    elif result1.get()=='':
        pass

14.设置四则运算按钮命令

tk.Button(frame1,text='x',width=5,height=3,font=(20),command=lambda: vv(3)).grid(row=1,column=4)
tk.Button(frame1,text='/',width=5,height=3,font=(20),command=lambda: vv(4)).grid(row=2,column=4)
tk.Button(frame1,text='+',width=5,height=3,font=(20),command=lambda: vv(1)).grid(row=3,column=4)
tk.Button(frame1,text='-',width=5,height=3,font=(20),command=lambda: vv(2)).grid(row=4,column=4)

15.定义函数deng(),用于结果计算,绑定计算键按钮

def deng():
    if mode==1:
        e=float(result1.get())+float(result2.get())
        result1.set(str('%.4f'% e))
    elif mode==2:
        e=float(result2.get())-float(result1.get())
        result1.set(str('%.4f'% e))
    elif mode==3:
        e=float(result2.get())*float(result1.get())
        result1.set(str('%.4f'% e))
    elif mode==4:
        e=float(result2.get())/float(result1.get())
        result1.set(str('%.4f'% e))

为了结果精确,取小数点后四位

16.最后别忘了加

root.mainloop()

窗口持续运行必加

17.效果展示:计算1.2+3.4-2.3(由于只设置了result1和result2,所以只能分为两次计算)

计算

计算,得到

18.完整代码

import tkinter as tk

root=tk.Tk()
root.title('calculaotr')

frame2=tk.Frame(root)
frame2.pack(padx=5,pady=5)

frame1=tk.Frame(root)
frame1.pack(padx=10,pady=10)

result1=tk.StringVar()
result2=tk.StringVar()

def cal(x):
    result1.set(result1.get()+x)
def delet():
    result1.set('')
    result2.set('')

def vv(x):#mode1
    if result1.get()!='':
        result2.set(result1.get())
        result1.set('')
        global mode
        mode = x
    elif result1.get()=='':
        pass
def deng():
    if mode==1:
        e=float(result1.get())+float(result2.get())
        result1.set(str('%.4f'% e))
    elif mode==2:
        e=float(result2.get())-float(result1.get())
        result1.set(str('%.4f'% e))
    elif mode==3:
        e=float(result2.get())*float(result1.get())
        result1.set(str('%.4f'% e))
    elif mode==4:
        e=float(result2.get())/float(result1.get())
        result1.set(str('%.4f'% e))


tk.Label(frame2,textvariable=result1,fg='white',bg='black').grid(row=0,column=2)
tk.Label(frame2,textvariable=result1,fg='white',bg='black').grid(row=1,column=2)
tk.Button(frame2,text='计算',width=3,height=1,font=(20),command=lambda: deng()).grid(row=2,column=2)

tk.Button(frame1,text='1',width=5,height=3,font=(20),command=lambda: cal('1')).grid(row=1,column=1)
tk.Button(frame1,text='2',width=5,height=3,font=(20),command=lambda: cal('2')).grid(row=1,column=2)
tk.Button(frame1,text='3',width=5,height=3,font=(20),command=lambda: cal('3')).grid(row=1,column=3)

tk.Button(frame1,text='4',width=5,height=3,font=(20),command=lambda: cal('4')).grid(row=2,column=1)
tk.Button(frame1,text='5',width=5,height=3,font=(20),command=lambda: cal('5')).grid(row=2,column=2)
tk.Button(frame1,text='6',width=5,height=3,font=(20),command=lambda: cal('6')).grid(row=2,column=3)

tk.Button(frame1,text='7',width=5,height=3,font=(20),command=lambda: cal('7')).grid(row=3,column=1)
tk.Button(frame1,text='8',width=5,height=3,font=(20),command=lambda: cal('8')).grid(row=3,column=2)
tk.Button(frame1,text='9',width=5,height=3,font=(20),command=lambda: cal('9')).grid(row=3,column=3)

tk.Button(frame1,text='归零',width=5,height=3,font=(20),command=lambda: delet()).grid(row=4,column=1)
tk.Button(frame1,text='0',width=5,height=3,font=(20),command=lambda: cal('0')).grid(row=4,column=2)
tk.Button(frame1,text='.',width=5,height=3,font=(20),command=lambda: cal('.')).grid(row=4,column=3)

tk.Button(frame1,text='x',width=5,height=3,font=(20),command=lambda: vv(3)).grid(row=1,column=4)
tk.Button(frame1,text='/',width=5,height=3,font=(20),command=lambda: vv(4)).grid(row=2,column=4)
tk.Button(frame1,text='+',width=5,height=3,font=(20),command=lambda: vv(1)).grid(row=3,column=4)
tk.Button(frame1,text='-',width=5,height=3,font=(20),command=lambda: vv(2)).grid(row=4,column=4)

root.mainloop()

结束

本人只是小白,若有改进方案,还望多多赐教

参考文献:

【python】tkinter教程、35个tkinter示例代码和GUI图示_python:基于实例的gui tkinter 编程-CSDN博客Python保留指定位数的小数【5种方法】_python保留小数点后三位-CSDN博客

Tkinter Button按钮组件如何调用一个可以传入参数的函数_button()的入参-CSDN博客

Python中的get和set方法_python get set-CSDN博客(用于获取StringVar或IntVar的文本值)

tkinter库详解-CSDN博客(介绍root,frame,label,button等基本概念)

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的四则运算计算器的Python程序,使用tkinter库实现图形界面: ```python import tkinter as tk class Calculator: def __init__(self, master): self.master = master master.title("四则运算计算器") self.result_var = tk.StringVar() self.result_var.set("0") self.result_label = tk.Label(master, textvariable=self.result_var, font=("Arial", 36)) self.result_label.grid(row=0, column=0, columnspan=4) button_texts = [ "7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", "C", "=", "/" ] self.buttons = [] for i, text in enumerate(button_texts): button = tk.Button(master, text=text, width=6, height=3, font=("Arial", 16)) self.buttons.append(button) row = i // 4 + 1 col = i % 4 button.grid(row=row, column=col) button.bind("<Button-1>", self.button_click) def button_click(self, event): button = event.widget text = button["text"] if text == "C": self.result_var.set("0") elif text == "=": try: result = eval(self.result_var.get()) self.result_var.set(str(result)) except: self.result_var.set("Error") else: if self.result_var.get() == "0" or self.result_var.get() == "Error": self.result_var.set(text) else: self.result_var.set(self.result_var.get() + text) root = tk.Tk() calculator = Calculator(root) root.mainloop() ``` 运行以上代码,即可看到一个简易四则运算计算器界面。用户可以通过点击按钮来输入数字和运算符,并通过“=”按钮来计算结果。如果输入有误,计算器会显示“Error”。用户可以通过“C”按钮来清空输入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值