我创建了一个GUI,我在其中读取CSV文件并计算数据的液体输出。现在我想做两件事:
1)我想基于时间生成输出,就像日期
一样
2)我想在GUI中的单独窗口上生成用户特定时间或日期的图表
这是我的代码:
import csv
from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showwarning, showinfo
import datetime
#csv_file = csv.reader(open("C:\Users\Lala Rushan\Downloads\ARIF Drop Monitoring Final\ARIF Drop Monitoring Final\DataLog.csv"))
from Tools.scripts.treesync import raw_input
class App(Frame):
def __init__(self, master):
Frame.__init__(self, master)
button1 = Button(self, text="Browse for a file", command=self.askfilename)
button2 = Button(self, text="Count the file", command=self.takedate)
button3 = Button(self, text="Exit", command=master.destroy)
button1.grid()
button2.grid()
button3.grid()
self.userInputFromRaw = Entry(self)
self.userInputFromRaw.grid()
self.userInputToRaw = Entry(self)
self.userInputToRaw.grid()
self.grid()
def askfilename(self):
in_file = askopenfilename()
if not in_file.endswith(('.CSV')):
showwarning('Are you trying to annoy me?', 'How about giving me a CSV file, genius?')
else:
self.in_file=in_file
def CsvImport(self,csv_file):
dist = 0
for row in csv_file:
_dist = row[0]
try:
_dist = float(_dist)
except ValueError:
_dist = 0
dist += _dist
print ("Urine Volume is: %.2f" % (_dist*0.05))
def takedate(self):
from_raw = self.userInputFromRaw.get()
from_date = datetime.date(*map(int, from_raw.split('/')))
print ('From date: = ' + str(from_date))
to_raw = self.userInputToRaw.get()
to_date = datetime.date(*map(int, to_raw.split('/')))
in_file = ("H:\DataLog.csv")
in_file= csv.reader(open(in_file,"r"))
for line in in_file:
_dist = line[0]
try:
file_date = datetime.date(*map(int, line[1].split(' ')[1].split('/')))
if from_date <= file_date <= to_date:
self.CsvImport(in_file)
except IndexError:
pass
root = Tk()
root.title("Urine Measurement")
root.geometry("500x500")
app = App(root)
root.mainloop()
如何完成上述2项任务?
答案 0 :(得分:0)
我必须同意Jacques de Hooge,你应该使用500
。
在文件的初始化时,导入它:
matplotlib
由于您只想用绘图打开一个新窗口,import matplotlib.pyplot as plt
窗口就足够了。您可以使用散点图:
matplotlib
其中plt.scatter(X, Y)
是具有x坐标的可迭代,X
是具有y坐标的可迭代。由于您希望通过不断变化的时间做某事,您可以在Y
列表中显示要绘制的值,执行以下操作:
values
您可能还想在一个线程中运行它,以便在plt.scatter(range(len(values)), values)
plt.show()
窗口打开时程序的其余部分不会“冻结”。有很多地方可以解释这一点。