Seite 1 von 1

Änderbarer Text im Ausgabefenster - Hilfe benötigt!

Verfasst: Freitag 7. Dezember 2012, 17:40
von br4ndy
Hey,
ich bin Pythonanfänger und mich hat der Ehrgeiz gepackt mein Projekt grafisch darzustellen, bis jetzt hat auch alles gut funktioniert, jetzt hänge ich aber leider an einer (warscheinlich) simplen Funktion.

Mein Code schaut bis jetzt folgendermaßen aus:

Code: Alles auswählen

value=[]
time=[]
from Tkinter import *
main = Tk()


def sende1():                
  s=Eingabefeld1.get()
  if s == "einseitige_auslenkung":
      d=open("einseitige_auslenkung.txt","r")
      liste=d.readlines()
      d.close()
      geloescht=liste.pop(0)

  if s == "zweiseitige_auslenkung":
      d=open("zweiseitige_auslenkung.txt","r")
      liste=d.readlines()
      d.close()
      geloescht=liste.pop(0)

  if s == "sprunganregung":
      d=open("sprunganregung.txt","r")
      liste=d.readlines()
      d.close()
      geloescht=liste.pop(0)
      
  for x in liste:
      if ";" in x:
          arr = x.split(";")
          y1 = (arr[1])                           
          y = float(y1.replace(",","."))          
          value.append(y)                         
          q0 = (arr[0])
          q = float (q0.replace(",","."))
          time.append(q)                                                            

      else:                                                                           
          arr = x.split()                         
          y1 = (arr[1])                           
          y = float(y1.replace(",","."))          
          value.append(y)
          q0 = (arr[0])
          q = float (q0.replace(",","."))
          time.append(q)
          
    
  a = 0                                                                       
  while a < len(value):                                                        
      if value[a] > 5.8:
          print "Vorsicht Ueberlast!!", value[a], "V bei", time[a], "s"
      else: 
          print "Gewicht O.K.        ", value[a], "V bei", time[a], "s"
        
      a = a + 1
    


Container1=Frame(main, height=100,width=400)        
Container1.pack(expand=NO)
Container2=Frame(main, height=100,width=400)
Container2.pack(expand=NO)
Eingabefeld1= Entry(Container1,bg='white')
Text1=Label(Container1,text='Datei: ')
Text2=Label(Container1,text='.txt')
Text3=Label(Container2,text='         ')
Knopf1=Button(main,text='Start',command=sende1)
Text1.pack(side=LEFT) 
Eingabefeld1.pack(side=LEFT)
Text2.pack(side=LEFT)
Text3.pack(side=LEFT)

Knopf1.pack(side=LEFT)

main.mainloop()
Text3 soll nun folgenden wert annehmen und ständig ändern:
" "Vorsicht Ueberlast!!", value[a], "V bei", time[a], "s" " bzw " "Gewicht O.K. ", value[a], "V bei", time[a], "s" ".
Ich habe jetzt versucht das ganze über text3.config(text=...)" zu lösen (so ähnlich hatte ich das ganze aus einem grafischen taschenrechner herausgelesen), leider wird mir nun aber in meinem Ausgabefenster Text3 nicht angepasst, bzw ist value[a] angeblich nicht definiert :(
Wie kann ich also Text3 richtig anzeigen, ständig überprüfen und ggf. ändern lassen?
Oder ist es möglich soetwas wie ein Ausgabefenster zu programmieren in dem die Werte bzw die Aussage "Überlast" durchlaufend angezeigt werden und das man verschieden einfärben kann ("gewicht ok"->grün,"überlast"->rot)?

Vielen Dank im Vorraus.

Re: Änderbarer Text im Ausgabefenster - Hilfe benötigt!

Verfasst: Freitag 7. Dezember 2012, 18:05
von Sirius3
Hallo br4ndy,

was nun? Wird der Text nicht geändert oder kommt eine Fehlermeldung und wie sieht die genau aus?
Was hast Du schon versucht?

So ist's besser:

Code: Alles auswählen

def sende1():               
    s=Eingabefeld1.get()
    if s not in ("einseitige_auslenkung", "zweiseitige_auslenkung", "sprunganregung"):
        return

    with open("%s.txt"%s,"r") as d:
        liste=d.readlines()

    time_value = [map(float,zeile.replace(';',' ').replace(',','.').split()) for zeile in liste[1:]]
    for time, value in time_value:         
        msg = "Vorsicht Ueberlast!!" if value > 5.8 else "Gewicht O.K.       "
        print "%s %fV bei %fs"%(msg,value,time) 
Grüße
Sirius

Re: Änderbarer Text im Ausgabefenster - Hilfe benötigt!

Verfasst: Freitag 7. Dezember 2012, 18:37
von br4ndy
Hallo Sirius,

also für folgenden code wird Text3 nicht geändert (bzw nicht angezeigt da er ja auf " " definiert ist):

Code: Alles auswählen

a = 0                                                                       
  while a < len(value):                                                        
      if value[a] > 5.8:
          print "Vorsicht Ueberlast!!", value[a], "V bei", time[a], "s"
          Text3.config(text="Ueberlast")
      else: 
          print "Gewicht O.K.        ", value[a], "V bei", time[a], "s"
          Text3.config(text="Gewicht O.K.")
      a = a + 1
für folgenden code bekomme ich eine fehlermeldung:

Code: Alles auswählen

a = 0                                                                       
  while a < len(value):                                                        
      if value[a] > 5.8:
          print "Vorsicht Ueberlast!!", value[a], "V bei", time[a], "s"
          Text3.config(text="Vorsicht Ueberlast!!", value[a], "V bei", time[a], "s")
      else: 
          print "Gewicht O.K.        ", value[a], "V bei", time[a], "s"
          Text3.config(text="Gewicht O.K.        ", value[a], "V bei", time[a], "s")
      a = a + 1
Fehlermeldung: "There's an error in your program: *** non-keyword arg after keyword arg (datei.py,line 51)"

und zu guter letzt für folgenden versuch,bei dem ich erstmal versuchen wollte einen sich ändernden wert darzustellen, wieder eine fehlermeldung:

Code: Alles auswählen

a = 0                                                                       
  while a < len(value):                                                        
      if value[a] > 5.8:
          print "Vorsicht Ueberlast!!", value[a], "V bei", time[a], "s"
          Text3.config(value[a])
      else: 
          print "Gewicht O.K.        ", value[a], "V bei", time[a], "s"
          Text3.config(value[a])
      a = a + 1
Fehlermeldung:
"Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "E:\fertig.py", line 54, in sende1
Text3.config(value[a])
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1202, in configure
return self._configure('configure', cnf, kw)
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1182, in _configure
cnf = _cnfmerge(cnf)
File "C:\Python27\lib\lib-tk\Tkinter.py", line 82, in _cnfmerge
for c in _flatten(cnfs):
TypeError: object of type 'float' has no len()"

Ich muss dazusagen dass ich bis jetzt nur einen python grundlagenkurs hinter mir habe und den tkinter-teil des programms via copy/paste zusammengebastelt und dann umgeschrieben/angepasst habe soweit ich die funktionen verstanden habe.

Re: Änderbarer Text im Ausgabefenster - Hilfe benötigt!

Verfasst: Freitag 7. Dezember 2012, 19:10
von Sirius3
Hallo br4ndy,

Um Text zu setzen geht das so:

Code: Alles auswählen

ueberlast = StringVar()
text3 = Label(master, textvariable=ueberlast).pack()
und zum Setzen:

Code: Alles auswählen

        msg = "Vorsicht Ueberlast!!" if value > 5.8 else "Gewicht O.K.       "
        ueberlast.set("%s %fV bei %fs"%(msg,value,time))
Deine 2. Methode tut nicht, weil aus den einzelnen Teilen ein String gemacht
werden muß, Methode 3 ist falsch, weil value[a] kein String ist.

Grüße
Sirius

Re: Änderbarer Text im Ausgabefenster - Hilfe benötigt!

Verfasst: Freitag 7. Dezember 2012, 19:37
von br4ndy
Also mit deinem code kam zunächst der fehler "name 'master' not defined".

nachdem ich 'master' rausgelöscht hatte zeigt er jetzt zwar "gewicht ok und die dazugehörenden werte aus der datei" an, allerdings nur den letzten wert meiner datei. wenn das programm jetzt noch die komplette datei ablaufen und die ausgabe jedem wert anpasst wärs perfekt, da es sich um eine datei mit gefühlten 1000 zeilen handelt und bei jedem wert, der 5,8 volt übersteigt, eine überlast warnung ausgegeben werden soll.

Re: Änderbarer Text im Ausgabefenster - Hilfe benötigt!

Verfasst: Samstag 8. Dezember 2012, 08:10
von Sirius3
Du willst 1000 Einträge in Deinem Label haben?
Dann wird es da aber ein bißchen eng.
Wie wärs mit eine ListBox?

Re: Änderbarer Text im Ausgabefenster - Hilfe benötigt!

Verfasst: Samstag 8. Dezember 2012, 09:25
von BlackJack
@Sirius3: Ich denke die Datei hat 1000 Zeilen und *ein paar* davon zeigen eine Überlast an. Ich würde es aber auch nicht in einem Label anzeigen.

@br4ndy: Warum willst Du die Anzeige laufend aktualisieren? 1000 Zeilen sind so schnell verarbeitet, dass das wenig Sinn macht. Man kann da auch alle Zeilen auf einmal verarbeiten und die Ausgabedaten sammeln und die am Ende in einem Widget anzeigen.

Re: Änderbarer Text im Ausgabefenster - Hilfe benötigt!

Verfasst: Montag 10. Dezember 2012, 22:02
von br4ndy
Danke BlackJack, ich denke so werde ich es mal versuchen :)