2017-02-15 24 views
0

私はCSVファイルを読み込み、データから液体出力を計算するGUIを作成しました。今、私は二つのことやりたい:私は時間に基づいて出力を生成したい
1)私は、ユーザーの特定の時間または日付のための私のGUIで別のウィンドウにグラフを生成したい
2)日付のようなPython 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

ほとんどの人は、MatPlotLibをそのようなものに使用します。 –

+0

私のコードでmatplotlibを使用する例がありますか?私はPythonには新しいので、それを理解することはできません。 – rushan

答えて

0

私はJacques de Hoogeと同意しなければなりません。matplotlibを使用してください。あなたのファイルのbegginingで は、それをインポートします。

import matplotlib.pyplot as plt 

あなただけのプロットで新しいウィンドウを開くようにしたいと、matplotlibウィンドウで十分です。あなたは、散布図を使用することができます。Xがx座標とy座標Yとiteratableとiteratableある

plt.scatter(X, Y) 

。あなたはプロットする値でvaluesリストを持つ、次のことができ、時間内に一定の変化を伴う何かをしたいので、次の手順を実行します。

plt.scatter(range(len(values)), values) 
plt.show() 

ように、あなたはまた、スレッド内でこれを実行したい場合がありますmatplotlibウィンドウが開いている間、プログラムの残りの部分は "フリーズ"しません。これが説明されている場所はたくさんあります。

+0

答えをありがとう。私はちょうどもう一つの混乱があります。X軸上では、** takedate()**関数とy軸上の日付を使用したいと思います。** csvimport()**関数から得られる液体計測の出力を出力したい。どこでグラフをプロットすべきですか? ** __ init __ **関数では? – rushan

関連する問題