Pythontkinter实现简易计算器(有GUI)

本人学生党,为参加学校比赛做出来的Python计算器,窗口使用tkinter,水平有限,不足之处欢迎提出。
话不多说,源代码:

# Calculator.pyw
# Made By 7.10 LYX
 
 
"""
程序的实现分为以下几个步骤:
1.导入模块,设置变量、主窗口等
2.定义输入与计算的函数 重点:防止非法输入
3.按钮与键盘的事件绑定
4.mainloop
易错点:
tkinter的bind方法会把event作为参数传给回调函数,所以如果回调函数没有参数,就会出现"1 Given"之类的错误
解决方法:
1.设置回调函数参数的默认值(一般为None)
2.使用lambda匿名函数作为bind指定的回调参数(一般用于回调函数需要特定的实参,此处不推荐)
"""
 
 
import tkinter
from tkinter import *
import tkinter.font
import re
from tkinter import messagebox
 
 
 
# 主要的颜色
cmclr_bg = "#%02x%02x%02x"%(200,200,200)
cmclr_fg = "#%02x%02x%02x"%(80,80,80)
sclr_bg = "#%02x%02x%02x"%(229,243,255)
sclr_fg = "#%02x%02x%02x"%(0,125,255)
 
# 主窗口
window = Tk()
window.title("计算器 F1—→帮助与更多信息")
window.geometry("320x420+300+300")
window.resizable(0,0)
mode = "-disable"
window.attributes(mode,0)
 
menubar = Menu(window)
filemenu = Menu(menubar,tearoff = False)
winmenu = Menu(menubar,tearoff = False)
filevar = IntVar()
winvar = IntVar()
filevar.set(2)
winvar.set(1)
roundingvar = 2
 
# 设置顶级菜单
def rounding(end):
     global roundingvar
     roundingvar = end
 
# 设置窗口模式,使用attributes函数
def modesetting(name):
     global mode
     mode = name
     if mode == "-toolwindow":
          window.attributes("-toolwindow",1)
          window.attributes("-disable",0)
          window.attributes("-topmost",1)
     elif mode == "-topmost":
          window.attributes("-toolwindow",0)
          window.attributes("-disable",0)
          window.attributes("-topmost",1)
     else:
          window.attributes("-toolwindow",0)
          window.attributes("-disable",0)
          window.attributes("-topmost",0)
     window.mainloop()
 
# 设置菜单
filemenu.add_radiobutton(label = "保留整数",variable = filevar,value = 0,command = lambda : rounding(0))
filemenu.add_radiobutton(label = "保留1位小数",variable = filevar,value = 1,command = lambda : rounding(1))
filemenu.add_radiobutton(label = "保留2位小数",variable = filevar,value = 2,command = lambda : rounding(2))
filemenu.add_radiobutton(label = "保留3位小数",variable = filevar,value = 3,command = lambda : rounding(3))
filemenu.add_radiobutton(label = "保留4位小数",variable = filevar,value = 4,command = lambda : rounding(4))
 
winmenu.add_radiobutton(label = "默认模式",variable = winvar,value = 1,command = lambda : modesetting("-disable"))
winmenu.add_radiobutton(label = "始终置顶",variable = winvar,value = 2,command = lambda : modesetting("-topmost"))
winmenu.add_radiobutton(label = "工具窗口",variable = winvar,value = 3,command = lambda : modesetting("-toolwindow"))
menubar.add_cascade(label = "精度",menu = filemenu)
menubar.add_cascade(label = "窗口模式",menu = winmenu)
window.config(menu = menubar)
# 设置Label文本为entry
entry = StringVar()
entry.set("0")
 
ft = tkinter.font.Font(family = "Consolas", weight=tkinter.font.BOLD)
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 tkinter 计算器示例代码: ```python import tkinter as tk class Calculator: def __init__(self, master): self.master = master master.title("Calculator") self.display = tk.Entry(master, width=30, justify='right', font=('Arial', 16)) self.display.grid(row=0, column=0, columnspan=4, padx=10, pady=10) # 按钮列表 buttons = [ '7', '8', '9', '/', '4', '5', '6', '*', '1', '2', '3', '-', '0', '.', '=', '+' ] # 按钮布局 for i, button in enumerate(buttons): row = i // 4 + 1 col = i % 4 tk.Button(master, text=button, width=7, height=3, font=('Arial', 12), command=lambda char=button: self.button_click(char)).grid(row=row, column=col) def button_click(self, char): if char == '=': try: result = eval(self.display.get()) self.display.delete(0, tk.END) self.display.insert(0, str(result)) except: self.display.delete(0, tk.END) self.display.insert(0, 'Error') else: self.display.insert(tk.END, char) root = tk.Tk() app = Calculator(root) root.mainloop() ``` 这个程序使用了 `tkinter` 模块来创建一个简单的 GUI 界面,用户可以在其中输入算术表达式并得到计算结果。程序中定义了一个 `Calculator` 类,用于创建 GUI 界面和处理用户的输入操作。在 `__init__` 方法中,我们创建了一个包含一个文本输入框和一些按钮的界面。在 `button_click` 方法中,我们处理用户的输入操作,如果用户按下了 `=` 按钮,则调用 `eval` 函数来计算表达式的值。否则,我们将用户的输入添加到文本框中。最后,我们创建了一个 `Tk` 对象并启动了主事件循环,这样程序就可以一直运行,直到用户关闭窗口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值