小白第一次发博客,可能有很多问题,望指正!
讲的不是很详细,提供思路。
目录:
- 成果展示
- 代码说明
- 其他补充和参考资料
——————分割线————————
1.成果展示
基本效果图:
如图,要实现的基本功能有:带括号的四则运算、历史记录
扩展功能:按键可随窗口大小变化而变化
2.代码说明
(1)控制输入
def get_input(entry, argu):
"""控制输入"""
# 从entry窗口展示中获取输入的内容
input_data = entry.get()
# 设置一些基础列表,方便控制
listchar = ["+", "*", "/", ")"]
listcharbase = ["+", "-", "*", "/"]
listnums = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
listcharall = ["+", "-", "*", "/", "(", ")"]
listpoint = [".", ""]
listcheck = listnums + listcharall + listpoint
# 控制输入字符(只对按钮有用,这里没太大意义) 和 输入长度控制
if not listcheck.__contains__(argu) or len(input_data) > 20:
return
# 第一个输入不能为运算符(负号和左括号除外)
elif not input_data and listchar.__contains__(argu):
return
# 前一个输入为加号:
elif input_data[-1:] == '+' and listchar.__contains__(argu):
return
# 前一个输入为负号:
elif input_data[-1:] == '-' and (listchar.__contains__(argu) or (input_data[-2:-1] == '-' and argu == '-')):
return
# 前一个输入为乘号:
elif input_data[-1:] == '*' and listchar.__contains__(argu):
return
# 前一个输入为除号:
elif input_data[-1:] == '/' and listchar.__contains__(argu):
return
# 前一个输入为左括号:
elif input_data[-1:] == '(' and listchar.__contains__(argu):
return
# 前一个输入为右括号:
elif input_data[-1:] == ')' and not (listcharbase.__contains__(argu) or argu == ')'):
return
# 当前输入为右括号(右括号数量必须小于等于左括号的数量):
elif argu == ')' and input_data.count('(') <= input_data.count(')'):
return
# 前一个输入为数字:
elif listnums.__contains__(input_data[-1:]) and argu == "(":
return
# 当前输入为小数点(一个数只能有一个小数点):
elif argu == '.':
i = 1
while i <= len(input_data):
if listcharall.__contains__(input_data[-i]):
break
elif listpoint.__contains__(input_data[-i]):
return
else:
i = i+1
entry.insert("end", ar