2017-12-19 4 views
2

Ich bin ziemlich neu in Python. Ich versuche, eine Textdatei mit tkinter zu lesen, dann die Manipulation zu machen und dann schließlich die Ergebnisse anzuzeigen. Es gibt im Grunde 3 Schritte.Lesen, Bearbeiten und Anzeigen von Textdatei in Tkinter

Hier ist meine Beispieldatei, die im Format festgelegt werden:

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 

Datei enthält Informationen über UP & DOWN-Status.

Schritt 1: offen & lesen Datei

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() 

SCHRITT 2: Manipulation

Hier habe ich durch jede Zeile zu gehen versuche, und prüfen, ob seine ABWÄRTS dann, wie viel die Gesamtausfallzeit ist und von welches Datum in diesem Fall (Beispieldatei) die Gesamtausfallzeit beträgt 12 min.

SCHRITT 3: Ich möchte diese 12 Minuten als Ausfallzeit nach Manipulation auf dem GUI-Bildschirm anzeigen. so schließlich sollte meine Ausgabe auf tinkter Bildschirm

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

sein, wie ich Schritt erreichen kann 2 & 3, ging ich durch viele Artikel über das Internet, aber nichts wirklich nützlich zu lösen diese finden kann. Jede Hilfe wäre großartig.

Antwort

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

Vielen Dank für die Antwort, ich bekomme unter Fehler, wenn ich das gleiche laufen. hat das Traceback angehängt. könnten Sie bitte beraten. – vanishka

+0

Aldo wollte nur wissen Gibt es eine Alternative zu diesem Schritt "Dateiname = Tk.filedialog.askopenfilename() # Funktioniert nur in 3.x", wenn ich in Python 2.7.x ausführen? – vanishka

+0

vorherigen Fehler ist behoben, wenn ich importierte "von tkinter importieren filialialog als fd" aber es gibt jetzt ein neues Problem. Ich habe das neue Traceback mit Fehler hinzugefügt. Ich habe versucht, "Start" Variable als global zu deklarieren, aber das hilft auch nicht, es zu lösen. – vanishka

Verwandte Themen