2017-12-19 23 views
2

私はPythonにはかなり新しいです。 tkinterを使ってテキストファイルを読み込み、最後に結果を表示しようとしています。基本的に3つのステップがあります。tkinterでのテキストファイルの読み込み、操作、表示

DOWN 07.11.2016 08:21:33 - 07.11.2016 08:22:33 
UP 07.11.2016 09:41:07 - 09.11.2016 09:20:33 
DOWN 09.11.2016 08:26:33 - 09.11.2016 08:35:33 
UP 09.11.2016 08:23:33 - 09.11.2016 08:25:33 
DOWN 09.11.2016 08:36:33 - 09.11.2016 08:38:33 
DOWN 10.11.2016 08:36:33 - 10.11.2016 08:38:33 

ファイルがUP & DOWNステータスに関する情報が含まれています

はここ形式で修正される予定の私のサンプルファイルです。

STEP 1: オープン&読むファイル

from tkinter import * 
from tkinter import ttk 
from tkinter import filedialog 
interface = Tk() 
def openfile(): 
    return filedialog.askopenfilename() 
button = ttk.Button(interface, text="Open", command=openfile) # <------ 
button.grid(column=1, row=1) 

interface.mainloop() 

STEP 2:そのDOWNはその後、合計ダウンタイムからどのくらいであれば、私は、各ラインを通過しようとしていると確認しています。ここ

マニピュレーションこの場合の日付(サンプルファイル)の合計ダウンタイムは12分です。

ステップ3: GUI画面での操作後、停止時間として12分を表示したいとします。 はそう最後にtinkter画面上の私の出力がどのように私はステップ2 & 3を達成することができます

Total Downtime is 12 min from 07.11.2016 08:21:33 

する必要があり、私はインターネット上で多くの記事を経たが、これを解決するために本当に役立つ何かを見つけることができませんでした。 助けがあれば助かります。

答えて

2
try: 
    import Tkinter as Tk 
    import tkFileDialog as fileDialog 
except ImportError: 
    import tkinter as Tk 
    fileDialog = Tk.filedialog 

import datetime 

# Manipulation 
def processText(lines): 
    total = 0 
    start = None 
    for k, line in enumerate(lines): 
     direction, date1, time1, _, date2, time2 = line.split() 
     if direction != "DOWN": continue 
     if start==None: start = date1 + ' ' + time1 
     # 1 
     D1, M1, Y1 = date1.split('.') 
     h1, m1, s1 = time1.split(':') 
     # 2 
     D2, M2, Y2 = date2.split('.') 
     h2, m2, s2 = time2.split(':') 
     # Timestamps 
     t1 = datetime.datetime(*map(int, [Y1, M1, D1, h1, m1, s1])).timestamp() 
     t2 = datetime.datetime(*map(int, [Y2, M2, D2, h2, m2, s2])).timestamp() 
     total += (t2-t1) 
    return total, start 

# Opening and updating 
def openFile(): 
    filename = fileDialog.askopenfilename() 

    fileHandle = open(filename, 'r') 
    down, start = processText(fileHandle.readlines()) 
    txt = "Total Downtime is {0} min from {1}".format(down//60, start) 
    textVar.set(txt) 

    fileHandle.close() 

# Main 
root = Tk.Tk() 

button = Tk.Button(root, text="Open", command=openFile) 
button.grid(column=1, row=1) 

textVar = Tk.StringVar(root) 
label = Tk.Label(root, textvariable=textVar) 
label.grid(column=1, row=2) 

root.mainloop() 
+0

私は同じことを実行すると、私は以下のエラーが発生します。トレースバックが添付された アドバイスをお願いします。 – vanishka

+0

Aldoが知りたかっただけです。この手順の代替手段はありますか? python 2.7.xで実行すると、 "filename = Tk.filedialog.askopenfilename()#3.xでのみ動作します" – vanishka

+0

「tkinter import filedialogからfdとしてインポートしたときに以前のエラーが修正されました」 しかし、新しい問題が発生しました。新しいトレースバックにエラーが追加されました。 "start"変数をグローバルとして宣言しようとしましたが、これも解決には役立ちません。 – vanishka

関連する問題