Bei tkinter Eingabe in Float

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Also in meiner Datei, in der letzten Zeile steht das :
2020-09-26/8-Pin Kabel/13.1
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Wenn dem so wäre, dann wäre last_number anschließend 13.1.

Und jetzt schließt sich der Kreis zu __blackjack__s Antwort, die du mit einem ;) abgetan hast: Deine letzte Zeile in der Datei ist leer.
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Bei mir ist die beschriebene Zeile die letzte, habe es gerade extra nochmal in vs code geöffnet. Nach der 13 kommt auch kein Leerzeichen

EDIT: Man kann hier nicht irgendwie Bilder posten?
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Du sitzt doch vor einer Programmiersprache.
Schau dir doch an, was in den einzelnen Zeilen steht:

Code: Alles auswählen

with open("Butterbrot.txt") as lines:
    for line_number, line in enumerate(lines):
        print(f"Zeile {line_number}: {repr(line)}")
Und ich bin mir ziemlich sicher, dass die letzte Zeile leer ist.
Nach der 13.1 muss ja kein Leerzeichen kommen, sondern ein Zeilenumbruch.
Und in der Zeile danach kommt bestimmt auch noch einer.
Zuletzt geändert von sparrow am Freitag 23. Oktober 2020, 10:48, insgesamt 1-mal geändert.
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Ich fürchte ich verstehe nicht ganz worauf du hinaus willst, bzw. Ich verstehe nicht worauf der Code hinausgeht... :|
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Er gibt die Zeilennummer und den Inhalt jeder Zeile aus. Inklusive Steuerzeichen.
Und ich bin mir ziemlich sicher, dass da nach deiner angenommenen letzten Zeile noch eine folgt.
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Aber wie kann ich die denn dann löschen? Ich habe es ja schon im Editor und vs code versucht, aber nicht geschafft
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Bei mir wird dann folgende Ausgabe erzeugt, auch wenn was ganz anderes raus kommt, vom Datum her, was in der Datei steht:

Code: Alles auswählen

Zeile0: '\n'
Zeile1: '2020-10-23/<function Grund at 0x000001F80C67ED30>/\n'
Zeile2: '2020-10-23/<function Grund at 0x0000020373A7ED30>/\n'
Zeile3: '2020-10-23/<function Grund at 0x0000022CE0FBED30>/\n'
Zeile4: '2020-10-23//\n'
Zeile5: '2020-10-23//\n'
Zeile6: '2020-10-23//\n'
Zeile7: '2020-10-23//\n'
Zeile8: '2020-10-23//'
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Tjoah, dann sind wir jetzt beim Urschleim angekommen.
Das ist das, was du einliest. Und du siehst ja selbst, wie die letzte Zeile aussieht. Rechts vom letzten / steht nichts.
Warum die Datei, die du dort einliest, so aussieht und nicht wie du dir das denkst? Offensichtlich liest du eine andere Datei ein als du vermutest.
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Eigentlich die richtige Datei, 99,9% sicher... Jetzt verstehe ich aber auch die Ausgabe, aber ich habe leider noch keine Ahnung wie ich das beheben kann :|...
In der letzten Zeile, nach dem / soll doch kein \!n stehen oder? Sonst wäre die letzte Zeile ja wirklich leer
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Hast Du denn nie in die Datei hineingeschaut? Sieht so aus, als ob das, was da drinsteht eh Quatsch ist. function Grund?
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Ich schicke euch mal den ganzen Inhalt der Datei (txt Datei)
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Code: Alles auswählen

2020-08-15/Amazon echo dot Ebay/85.45
2020-08-15/Denon Ebay/123.45
2020-08-22/Tomtom Ebay/126.15
2020-08-24/Wiedergefundenes Geld/131.15
2020-08-31/McQueen Ebay/221.15
2020-09-01/Taschengeld/241.15
2020-09-01/Adidas Schuhe ebay/253.15
2020-09-05/Glasfaser vs. Kupferkabel/258.15
2020-09-10/Llyod Schuhe Ebay/258.7
2020-09-13/Zwo asi 120mm/96.7
2020-09-13/Zwo Guidescope/16.7
2020-09-26/8-Pin Kabel/13.1
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Das ist nicht die Datei, die Python liest.
Du sitzt doch vor einer Programmiersprache. Es gibt kein "zu 99,9% sicher". Es gibt 100% sicher, weil du das jederzeit überprüfen kannst. Das Ergebnis entspricht nicht dem, was du erwartest? Dann musst du herausfinden, woran das liegt.
Du hast vorher gedacht, du kennst den Inhalt der Datei, die gelesen wird. Da wissen wir jetzt: den kennst du nicht.
Nun musst du herausfinden, welche Datei da eingelesen wird. Und dann musst du dir das halt anzeigen lassen.

Code: Alles auswählen

from pathlib import Path

filepath = Path("Butterbrot.txt")

print(f"Reading file: {filepath.absolute()}")

with open(filepath) as lines:
    for line_number, line in enumerate(lines):
        print(f"Zeile {line_number}: {repr(line)}")
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@rennmaus: Jede Zeile sollte mit einem Zeilenende-Zeichen abgeschlossen werden, auch die letzte. Und die Daten sehen mir so aus, als sollte man da nicht selbst ein Format erfinden sondern CSV verwenden. Denn wenn die zweite Spalte Freitext ist, dann kann da ja auch das Trennzeichen drin vorkommen. Um so etwas will man sich nicht selbst kümmern müssen wenn es dafür schon standardisierte Formate und fertige Module für gibt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Oke probiere ich gleich aus, melde mich dann
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Wow, das hätte ich wirklich nicht gedacht, es war wirklich die falsche Datei, hier jetzt die richtige Ausgabe:

Code: Alles auswählen

Zeile 0: '2020-08-15/Amazon echo dot Ebay/85.45\n'
Zeile 1: '2020-08-15/Denon Ebay/123.45\n'
Zeile 2: '2020-08-22/Tomtom Ebay/126.15\n'
Zeile 3: '2020-08-24/Wiedergefundenes Geld/131.15\n'
Zeile 4: '2020-08-31/McQueen Ebay/221.15\n'
Zeile 5: '2020-09-01/Taschengeld/241.15\n'
Zeile 6: '2020-09-01/Adidas Schuhe ebay/253.15\n'
Zeile 7: '2020-09-05/Glasfaser vs. Kupferkabel/258.15\n'
Zeile 8: '2020-09-10/Llyod Schuhe Ebay/258.7\n'
Zeile 9: '2020-09-13/Zwo asi 120mm/96.7\n'
Zeile 10: '2020-09-13/Zwo Guidescope/16.7\n'
Zeile 11: '2020-09-26/8-Pin Kabel/13.1'
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Code: Alles auswählen

import tkinter
from datetime import date
from pathlib import Path
pfad=Path('C:/Users/chris/Desktop/PyChris/Butterbrot.txt')
aktuellesDatum = date.today()

root=tkinter.Tk()
e=tkinter.Entry(root)


global neu
neu=e.get()
global grund
grund=e.get()


def Neu():
    neu=e.get()
    neu=float(neu)

def Grund():
    grund=e.get()
    grund=str(grund)

def Beenden():
    root.destroy()
    

e=tkinter.Entry(root)
e.pack()
b0=tkinter.Button(root, text="Beenden", command=Beenden)
b0.pack()

lb=tkinter.Label()
lb ["text"] = "Bitte Grund eingeben"
lb.pack()

b1=tkinter.Button(root, text="Abgeben", command=Grund)
b1.pack()




b=tkinter.Button(root, text="Abgeben", command=Neu)
b.pack()
filename=pfad
file=open(pfad, 'r')

lb["text"] = file.read()
with open(pfad) as lines:
    for line in lines:
        pass
alt = float(line.split("/",2)[-1])
neu+=alt


filename=pfad
file=open(pfad, 'a')
file.write("\n" + str(aktuellesDatum) + "/" + str(grund) + "/" + str(neu))
file.close()



root.mainloop()
Hier nochmal der Code, vielleicht jetzt nicht so effizient, die global Variablen, helfen mir sehr, jedenfalls funktioniert er bis zu dem Punkt:

Code: Alles auswählen

neu+=alt
Ihr habt ja den Code, was kann ich dagegen machen? Ich wandle doch beide in einen float um...
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@rennmaus: das `global´ hilft Dir an dieser Stelle absolut gar nichts.
Du hast noch nicht verinnerlicht, wie GUI-Programme arbeiten. Der Interpreter führt stumpf alle Befehle von oben nach unten aus. Bis er zu root.mainloop kommt, und erst innerhal des Mainloop kann der Nutzer was eingeben und es werden die Callbacks aufgerufen.
Was für einen Wert neu hat, kann man übrigens durch ein einfaches print vor neu+=alt herausfinden.
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Mann so langsam komme ich mir böd vor.... Wieso hat neu jetzt garkeinen wert?

EDIT: Wenn ich aber das Global wegglasse, und damit auch neu=e.get(), dann ist neu nicht mehr definiert... Ich bin ein einziges Fragezeichen :?: :?:
Antworten