【python】Tkinter模块之简易计算器

Tkinter模块之简易计算器

语法部分:

1、使用tkinter.Tk() 生成主窗口(root=tkinter.Tk());

1root.title('标题名')       修改框体的名字,也可在创建时使用className参数来命名; 2root.resizable(0,0)       框体大小可调性,分别表示x,y方向的可变性; 3root.mainloop() 保持主窗口一直消息循环中。。 4 5

2、tkinter中的核心组件:
在这里插入图片描述
3、组件的放置和排版:
在这里插入图片描述
4、文本框tkinter.Entry,tkinter.Text控制参数:
Recently 祝祝
5、 使用tkinter.Button时控制按钮的参数:
Recently 祝祝 activebackground:按钮按下后显示颜place_params色
6、functools下的partial模块应用
偏函数partial,可以理解为定义了一个模板,后续的按钮在模板基础上进行修改或添加特性
**

注意:

1:sticky:默认的控件在窗口中的对齐方式是居中。可以使用sticky选项去指定对齐方式,可以选择的值有:N/S/E/W,分别代表上对齐/下对齐/左对齐/右对齐,可以单独使用N/S/E/W,也可以上下和左右组合使用,达到不同的对齐效果,
总结如下:

sticky=N/S/E//W:顶端对齐/底端对齐/右对齐/左对齐

sticky=N+S:拉伸高度,使其在水平方向上顶端和底端都对齐

sticky=E+W,拉伸宽度,使其在垂直方向上左边界和右边界都对齐

sticky=N+S+E:拉伸高度,使其在水平方向上对齐,并将控件放在右边(当两个控件放在同一行同一列时效果明显)
2、pack()
pack()有以下几个常用属性:

side
padx
pady
ipadx
ipady
1,side
side属性有四个可选值:‘top’、‘bottom’、‘left’、‘right’,分别表示将控件位置设在窗口顶部中心、底部中心、左边中心、右边中心。side默认值为’top’。

2,padx、pady、ipadx、ipady
这四个属性分别设置控件水平方向外边距、竖直方向外边距、水平方向内边距、竖直方向内边距。

**

**

运行结果图:

**
在这里插入图片描述

修改代码后运行结果:

Recently 祝祝

运行代码:

1import tkinter 2from functools import partial 3# 按钮输入调用 4def get_input(entry, argu): 5 # 从entry窗口展示中获取输入的内容 6 input_ZMX = entry.get() 7 # 出现连续+,则第二个+为无效输入,不做任何处理 8 if (input_ZMX[-1:] == '+') and (argu == '+'): 9 return 10 # 输入合法将字符插入到entry窗口结尾 11 entry.insert("end", argu) 12 13# 清空entry内容(清空窗口) 14def clear(entry): 15 entry.delete(0, "end") 16 17# 计算 18def calc(entry): 19 input_ZMX = entry.get() 20 # 计算前判断输入内容是否为空;首字符不能为*/;*/不能连续出现3次; 21 if not input_ZMX: 22 return 23 clear(entry) 24 # 异常捕获,在进行数据运算时如果出现异常进行相应处理 25 try: 26 # eval() 函数用来执行一个字符串表达式,并返回表达式的值;并将执行结果转换为字符串 27 output_ZMX = str(eval(input_ZMX)) 28 except Exception: 29 # 将提示信息输出到窗口 30 entry.insert("end", "Calculation error") 31 else: 32 # 将计算结果显示在窗口中 33 if len(output_ZMX) > 20: 34 entry.insert("end", "Value overflow") 35 else: 36 entry.insert("end", output_ZMX) 37 38 39if __name__ == '__main__': 40 41 root = tkinter.Tk() 42 root.title("Calculation") 43# 框体大小可调性,分别表示x,y方向的可变性; 44 root.resizable(0, 0) 45 46 button_ZMX = 'orange' 47 math_sign_ZMX = 'DarkTurquoise' 48 cal_output_ZMX = 'YellowGreen' 49 button_active_ZMX = 'Yellow' 50 51 52 entry = tkinter.Entry(root, justify="right", font=1) 53 entry.grid(row=0, column=0, columnspan=4, padx=10, pady=10) 54 55 def place_button(text, func, func_params, bg=button_ZMX , **place_params): 56 # 偏函数partial,可以理解为定义了一个模板,后续的按钮在模板基础上进行修改或添加特性 57 # activebackground:按钮按下后显示颜place_params色 58 my_button = partial(tkinter.Button, root, bg=button_ZMX, padx=10, pady=3, activebackground=button_active_ZMX) 59 button = my_button(text=text, bg=bg, command=lambda: func(*func_params)) 60 button.grid(**place_params) 61 62 # 文本输入类按钮 63 place_button('7', get_input, (entry, '7'), row=1, column=0, ipadx=5, pady=5) 64 place_button('8', get_input, (entry, '8'), row=1, column=1, ipadx=5, pady=5) 65 place_button('9', get_input, (entry, '9'), row=1, column=2, ipadx=5, pady=5) 66 place_button('4', get_input, (entry, '4'), row=2, column=0, ipadx=5, pady=5) 67 place_button('5', get_input, (entry, '5'), row=2, column=1, ipadx=5, pady=5) 68 place_button('6', get_input, (entry, '6'), row=2, column=2, ipadx=5, pady=5) 69 place_button('1', get_input, (entry, '1'), row=3, column=0, ipadx=5, pady=5) 70 place_button('2', get_input, (entry, '2'), row=3, column=1, ipadx=5, pady=5) 71 place_button('3', get_input, (entry, '3'), row=3, column=2, ipadx=5, pady=5) 72 place_button('0', get_input, (entry, '0'), row=4, column=0, ipadx=8, pady=5, 73 columnspan=2, sticky=tkinter.E + tkinter.W + tkinter.N + tkinter.S) 74 place_button('.', get_input, (entry, '.'),row=4, column=2, ipadx=7, pady=5) 75 76 # 运算输入类按钮 77 place_button('*', get_input, (entry, '*'), bg=math_sign_ZMX , row=1, column=3, ipadx=5, pady=5) 78 place_button('-', get_input, (entry, '-'), bg=math_sign_ZMX, row=2, column=3, ipadx=5, pady=5) 79 place_button('+', get_input, (entry, '+'), bg=math_sign_ZMX, row=3, column=3, ipadx=5, pady=5) 80 81 # 功能输入类按钮(背景色、触发功能不同) 82 place_button('=', calc, (entry,), bg=cal_output_ZMX, row=4, column=3 ,ipadx=5, pady=5) 83 84 root.mainloop() 85 86 87 88 89 90

代码交流 2021