本人学生党,为参加学校比赛做出来的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)