Gui zum einlesen von Datei und Ausgabe von Speicherort mit

Fragen zu Tkinter.
Antworten
LimettenPraktikant
User
Beiträge: 9
Registriert: Freitag 12. September 2008, 13:05

....Gui zum einlesen von Datei und Ausgabe von Speicherort mit entsprechenden Funktion verknüpfen.

Guten Abend zusammen. :)

habe folgende Codes:

der GUI zum einlesen der Datei + Ausgabe von Speicherort:

Code: Alles auswählen

from Tkinter import *
import tkMessageBox
import tkFileDialog
import os
from sys import argv
import shutil
from time import sleep

class Gui:
    def __init__(self):
        self.fenster = Tk()
        self.fenster.geometry('%dx%d+%d+%d' % (350, 400, 250, 250))
        self.fenster.title('GUI')
        self.file_path = os.getcwd() + '\\myscript.py'
        self.save_path = os.getcwd()
        #----------------------

        # Frame2 für Dateiauswahl
        self.frame2=Frame(master=self.fenster)
        # Label Überschrift
        self.te1 = Label(self.frame2, text = 'Hier Pfad für Datei:')
        self.te1.grid(row=0, column=0, columnspan=2, sticky=W)
        # Button für py Datei
        self.browse1 = Button(self.frame2, text='....', width=3, command = self.get_pfad1)
        self.browse1.grid(row=1, column=2, padx=3, sticky=E)
        # Entry für py Datei
        self.pfad1 = Entry(self.frame2, width = 40)
        self.pfad1.grid(row=1, column=1, sticky=W)
        self.frame2.grid(row=2, padx=5, pady=5)
        #----------------------------
        # Frame3 für Speicherort
        self.frame3=Frame(master=self.fenster)
        # Label Überschrift
        self.te2 = Label(self.frame3, text = 'Speicherort der Ausgabedatei:')
        self.te2.grid(row=0, column=0, columnspan=2, sticky=W)
        # Button für Speicherort
        self.browse2 = Button(self.frame3, text='....', width=3, command = self.get_pfad2)
        self.browse2.grid(row=1, column=2, padx=3, sticky=E)
        # Entry für Speicherort
        self.pfad2 = Entry(self.frame3, width = 40)
        self.pfad2.grid(row=1, column=1, sticky=W)
        self.frame3.grid(row=3, padx=5, pady=5)
        # ------------------------------
        # Frame4 für Starten und Beenden
        self.frame4=Frame(master=self.fenster)
        self.st = Button(self.frame4, text='Start', width=8, command = self.run)
        self.st.grid(row=0, column=0, sticky=E, padx=5, pady=10)
        self.button = Button(self.frame4, text = 'Quit', width=8, command = self.frame3.quit)
        self.button.grid(row=0, column=1, sticky=W, padx=5, pady=10)
        self.frame4.grid(row=7)
        # ---------------------------------





        self.fenster.mainloop()

    def get_pfad1(self):
        pfad_temp=tkFileDialog.askopenfilename(filetypes=[('ED1MBaud.a2l', '.a2l')])
        if pfad_temp != "":
            self.pfad1.delete(0, END)
            self.file_path = os.path.normpath(pfad_temp)
            self.pfad1.insert(0, self.file_path)


    def get_pfad2(self):
        pfad_temp=tkFileDialog.askdirectory()
        if pfad_temp != "":
            self.pfad2.delete(0, END)
            self.save_path = os.path.normpath(pfad_temp)
            self.pfad2.insert(0, self.save_path)

und eine Funktion, die Daten aus der einzulesende Datei aussucht und in eine .txt kopiert.

Code: Alles auswählen



import time

def get_string(string_, zeile_):
  zeile_ =  str(zeile_)
  zeil = zeile_.ljust(7)
  nam = string_.ljust(70)
  lang = str(len(string_))
  lang = lang.ljust(8)
  string_ = zeil + nam + lang
  return string_

def get_tab():
  zeil = 'Zeile'
  zeil = zeil.ljust(7)
  nam = 'Name'
  nam = nam.ljust(70)
  lang = 'Laenge'
  lang = lang.ljust(8)
  st = zeil + nam + lang
  return st

f = file('TSXD7000C________PO3R420_ED1MBaud.a2l', 'r') '' <-----------------------------------HIER SOLLTE DIE EINGELESEN DATEI DES GUI STEHEN
log = file('log_ED1MBaud.txt', 'w') ''<------------------------------------------------------------------UND HIER SOLLTE DER AUSGABEORT STEHEN
log.write('TIME: ' + time.asctime(time.localtime(time.time())) + '\n\n')
tab = get_tab()
log.write(tab + '\n')
trenn = '-'
trenn = trenn.ljust(len(tab), '-')
log.write(trenn + '\n')

gr =  len(f.readlines())
f.seek(0)

zeile = 0
test = True
len_disp = 0


while(zeile <= gr):
    line = f.readline()
    zeile += 1
    if 'DISPLAY_IDENTIFIER' in line:
          test = line.strip()
          count = test.find(' ')
          test = test[count+1:]
          if len(test) >32:
            len_disp += 1
            log.write(get_string(test, zeile) + '\n')





log.write('\n\nZUSAMMENFASSUNG\n')
log.write('DISPLAY_IDENTIFIER laenger als 32 Zeichen (Anzahl): ' + str(len_disp) + '\n')
print 'Fertig'
f.close()
log.close()

Mit der GUI sucht man die einzulesende Datei aus. Nun würde ich gerne
ein- und ausgabe datei von der GUI mit der Funktion verknüpfen, also dass man mit der GUI aussucht welche Datei zu bearbeiten ist und den Ausgabeort bestimmt.

Über Hilfe würde ich mich sehr freuen :)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

So richtig erschließen will es sich mir noch nicht:
Hast du den ganzen Code selbst geschrieben? Oder hast du von irgendwoher Code-Fragmente genommen/bekommen, die jetzt irgendwie zusammengebastelt werden sollen?

Das Ganze macht einen ganz und gar unausgegorenen Eindruck.
BlackJack

@LimettenPraktikant: GUI-Programme laufen ereignisbasiert, d.h. man schreibt das Programm so, dass man auf Aktionen vom Benutzer reagiert. Du musst die Funktionalität also in eine Funktion verpacken, die beim Druck auf den "Start"-Knopf mit den Dateinamen aufgerufen wird.

Ansonsten ist das Skript ziemlich unübersichtlich und teilweise etwas abenteuerlich. Du liest die komplette Datei in eine Liste, bestimmst deren Länge, wirfst dann die Liste mit dem Dateiinhalt weg und liest dann die Datei noch einmal ein, auf eine recht umständliche Weise. Was genau spricht gegen eine einfache ``for``-Schleife über die Datei!? Zusammen mit der `enumerate()`-Funktion um die Zeilennummer nicht von Hand hoch zählen zu müssen.

`get_string()` und `get_tab()` sind auch lang und umständlich. Das kann man mit einer Zeichenkette und dem ``%``-Operator auch viel einfacher haben, da sind Funktionen überflüssig.

Was sollen die '_' am Ende von `string_` und `zeile_` in `get_string()`?

Hast Du das Tutorial in der Python-Dokumentation mal durch gearbeitet?
LimettenPraktikant
User
Beiträge: 9
Registriert: Freitag 12. September 2008, 13:05

numerix hat geschrieben:So richtig erschließen will es sich mir noch nicht:
Hast du den ganzen Code selbst geschrieben? Oder hast du von irgendwoher Code-Fragmente genommen/bekommen, die jetzt irgendwie zusammengebastelt werden sollen?

Das Ganze macht einen ganz und gar unausgegorenen Eindruck.
Kann schon sein dass es leider etwas unausgegoren rüberkommt... ist natürlich auch ein grund weshalb ich mich an euch wende.
ja, habe Code fragmente zusammengebastelt.
LimettenPraktikant
User
Beiträge: 9
Registriert: Freitag 12. September 2008, 13:05

BlackJack hat geschrieben:@LimettenPraktikant: GUI-Programme laufen ereignisbasiert, d.h. man schreibt das Programm so, dass man auf Aktionen vom Benutzer reagiert. Du musst die Funktionalität also in eine Funktion verpacken, die beim Druck auf den "Start"-Knopf mit den Dateinamen aufgerufen wird.

Ansonsten ist das Skript ziemlich unübersichtlich und teilweise etwas abenteuerlich. Du liest die komplette Datei in eine Liste, bestimmst deren Länge, wirfst dann die Liste mit dem Dateiinhalt weg und liest dann die Datei noch einmal ein, auf eine recht umständliche Weise. Was genau spricht gegen eine einfache ``for``-Schleife über die Datei!? Zusammen mit der `enumerate()`-Funktion um die Zeilennummer nicht von Hand hoch zählen zu müssen.

`get_string()` und `get_tab()` sind auch lang und umständlich. Das kann man mit einer Zeichenkette und dem ``%``-Operator auch viel einfacher haben, da sind Funktionen überflüssig.

Was sollen die '_' am Ende von `string_` und `zeile_` in `get_string()`?

Hast Du das Tutorial in der Python-Dokumentation mal durch gearbeitet?
Jup, habe ich durchgearbeitet.
Was sollen die '_' am Ende von `string_` und `zeile_` in `get_string()`?
Das soll später in der ausgegebene txt.datei ganz oben stehen.
also so ungefähr. ( die platzsperren muss man sich leider denken)

Zeile Name Laenge
-------------------------------------------------------------------------------------
BlackJack

Die Frage war nicht was die Funktion macht, sondern warum da Unterstriche an den beiden Namen `string_` und `zeile_` hängen!?
LimettenPraktikant
User
Beiträge: 9
Registriert: Freitag 12. September 2008, 13:05

BlackJack hat geschrieben:Die Frage war nicht was die Funktion macht, sondern warum da Unterstriche an den beiden Namen `string_` und `zeile_` hängen!?
Gut das könnte man ändern...

das Problem der Einbindung besteht bei mir leider immer noch. :(
lunar

LimettenPraktikant hat geschrieben:das Problem der Einbindung besteht bei mir leider immer noch. :(
Dein Problem ist nicht die Einbindung an sich, dein Problem fängt schon bei deinem Quellcode an. Der ist alles andere als übersichtlich und wartbar, ein Mißstand, welchen du beheben solltest, bevor du auch nur darüber nachdenken kannst, wie du eine graphische Oberfläche dafür implementierst.
Antworten