import tkinter
from tkinter import ttk
from tkinter import *
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
def suanshu():
global n1
n1= entry1.get() # 获取输入框1的值
# 将结果添加到文本框显示
if int(n1)<10:
t.insert('insert', int(n1) * 2)
elif int(n1)>=10 and int(n1)<20:
t.insert('insert', int(n1) * 3)
else:t.insert('insert', int(n1) * 4)
def baocun():
f = open("waterfee.txt", "a", encoding='utf-8')
n1 = entry1.get()
n2=comboxlist.get()
n3=t.get('0.0','end')
f.write("月份:"+n2+"---用水吨数:" + n1+"---费用:"+n3)
f.close()
def zhibiao():
file=open('waterfee.txt',"r",encoding='UTF-8')
date=file.readlines()
part_1 = []
part_2 = []
part_3 = []
for num in file:
# split用于将每一行数据用逗号分割成多个对象
# 取分割后的第0列,转换成float格式后添加到para_1列表中
part_1.append((num.split('月份:')[0]))
print(part_1)
# 取分割后的第1列,转换成float格式后添加到para_2列表中
part_2.append((num.split('---用水吨数:')[1]))
# 取分割后的第2列,转换成float格式后添加到para_3列表中
part_3.append((num.split('---费用:')[2]))
plt.legend(title='zhibiao', # 设置图例标题
loc='lower left', # 设置图例参考位置
bbox_to_anchor=(0.43, 0.75), # 设置图例位置偏移量
shadow=True, # 显示阴影
facecolor='yellowgreen', # 设置图例背景色
edgecolor='red', # 设置图例边框颜色
ncol=2, # 显示为两列
markerfirst=False)
plt.figure()
plt.title('zhibiao')
plt.plot(part_1,part_2)
plt.plot(part_1, part_3)
plt.show()
window =Tk()
window.title('水费记账本')
window.geometry('400x150+600+300')
comvalue = tkinter.StringVar() # 窗体自带的文本,新建一个值
comboxlist = ttk.Combobox(window, textvariable=comvalue) # 初始化
comboxlist["values"] = (["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"])
comboxlist.current(0) # 选择第一个
comboxlist.grid(row=0,column=1)
Label1=Label(window,text='用水吨数:',font=(20))
Label1.grid(row=2,column=0)
Label2=Label(window,text='所交水费:',font=(20))
Label2.grid(row=3,column=0)
Label3=Label(window,text='请选择月份:',font=(20))
Label3.grid(row=0,column=0)
entry1=Entry(window)
entry1.grid(row=2,column=1)
t =Text(window,state='normal',width=15, height=2)
t['width']=10
t['height']=2
t.grid(row=3,column=1)
button1=Button(window,text='计算',command=suanshu)
button1.grid(row=4,column=0)
button2=Button(window,text='保存',command=baocun)
button2.grid(row=4,column=1)
button3=Button(window,text='退出',command=window.quit)
button3.grid(row=4,column=2)
button4=Button(window,text='制表',command=zhibiao)
button4.grid(row=5,column=1)
window.mainloop()
代码中主要问题在zhibiao函数,在读取文本后切割获取数据写法不正确,导致在作图时无法显示线条。将该函数作如下修改即可。
def zhibiao():
file = open('waterfee.txt', "r", encoding='UTF-8')
data = file.readlines()
part_1 = []
part_2 = []
part_3 = []
for num in data:
part_1.append((num.split('月份:')[1].split('---')[0]))
part_2.append(int(num.split('---用水吨数:')[1].split('---')[0]))
part_3.append(int(num.split('---费用:')[-1].split(':')[-1].strip()))
plt.subplots(1,2,figsize=(12,8))
plt.subplot(1,2,1)
plt.title('zhibiao1')
plt.plot(part_1, part_2, 'b-')
plt.xlabel('月份')
plt.ylabel('用水吨数')
plt.xticks(rotation=30)
plt.legend(labels=['用水吨数'],loc='upper left')
plt.subplot(1,2,2)
plt.title('zhibiao2')
plt.plot(part_1, part_3,'m-')
plt.xlabel('月份')
plt.ylabel('费用')
plt.xticks(rotation=30)
plt.legend(labels=['费用'],loc='upper left')
plt.show()