python通过tkinter和json界面库实现考研知识点统计
使用下列代码前必须安装tkinter和json库
一、实现简单界面:
"""
from tkinter import *
import test
class mainView():def __init__(self):self.initializeUI()def initializeUI(self):self.window = Tk()self.window.title('22考研数学真题统计')self.window.geometry('1000x600')Label1 =Label(self.window, text="输入要统计的键值对数据:",fg = 'blue',font=('宋体',20,'italic'))Label1.pack()self.text = Text(self.window, width=80, height=1,font=('宋体',18,'italic'))self.text.pack()Button(self.window, text="开始统计",font=('Helvetica', '20'), command=self.begin).pack()Button(self.window, text="退出",font=('Helvetica', '20'), command=self.end).pack()mainloop()def begin(self):flag=Trueif len(self.text.get('0.0','end').split('\n'))!=2:print('不能换行输入数据!')flag=Falseself.window.destroy()if flag:answer=self.text.get('0.0','end').strip('\n')test.main(answer)self.window.destroy()def end(self):self.window.destroy()
def main():mainView()if __name__ == '__main__':main()
二、实现统计代码:
import json
def init():result={}index = [i for i in range(235)]for i in range(len(index)):result[i]=0with open('kaoYanMath22.json', 'w') as f:json.dump(result, f)def calculate(changeValue):#先读with open('kaoYanMath22.json', 'r') as f:result = json.load(f)#备份with open('kaoYanMath22-1.json', 'w') as f:json.dump(result, f)#再写for i in range(len(changeValue)):result[str(changeValue[i][0])]+=changeValue[i][1]with open('kaoYanMath22.json', 'w') as f:json.dump(result, f)def readMath():with open('kaoYanMath22.json', 'r') as f:result = json.load(f)print(result)def main(string):# readMath()# string = input()# print(string.split(','))# 对异常输入进行限制flag = Truefor keyValue in string.split(','):if len(keyValue) == 0:print('输入统计数据有误!,请重新输入')flag = Falsebreakelif len(keyValue.split(':'))!=2:print('输入统计数据有误!,请重新输入')flag = Falsebreakif flag:changeValue = [[int(keyValue.split(':')[0])-1, int(keyValue.split(':')[1])] for keyValue in string.split(',')]for index in range(len(string.split(','))):if int(string.split(',')[index].split(':')[0]) < 1 or int(string.split(',')[index].split(':')[0]) > 235 or int(string.split(',')[index].split(':')[1]) < 0 or int(string.split(',')[index].split(':')[1]) > 20:print('输入统计数据有误!,请重新输入')flag = Falsebreakif flag:print('changeValue',changeValue)calculate(changeValue)if __name__ == '__main__':#main()pass
总结:
在本文的稍微地实现了部分异常处理,如用备份防止数据随意篡改,对输入数据进行约束;
备注:
如果本文存在的不足之处,希望留言评论区,谢谢!