Seite 1 von 1

Fehler beim Eingabefeld auswerten

Verfasst: Sonntag 9. Juni 2019, 17:37
von Fire Spike
Hallo, ich habe wieder einmal ein Problem.
Wenn ich dieses Programm ausführe und auf den Button Komprimieren klicke gibt es einen Fehler

Programm:

Code: Alles auswählen

from tkinter import *
import shutil
ausgabetext = ""
def kompromieren():
    Kompromierverzeichnis = root.eingabefeld.get()
    Dateinamen = root.eingabefeld2.get()
    try:
        shutil.make_archive(Kompromierverzeichnis, "zip", Dateinamen)
        ausgabetext = "Wurde kompromiert."
        root.update()
    except:
        ausgabetext = "Falscher Pfad"
        root.update()
def entpacken():
    try:
        shutil.unpack_archive(Dateiname, Extraktverzeichnis, "zip")
        ausgabetext = "Wurde entpackt"
    except:
        ausgabetext = "Falscher Pfad"

root = Tk()
root.title("Archivverwaltung")

Label(root,
      text="Bitte Archivpfad eingeben").grid(row=0, column=0)

Label(root,
      text="Bitte Dateienpfad eingeben").grid(row=2, column=0)

Label(root,
      text=ausgabetext).grid(row=4, column=0, columnspan=2)

eingabefeld = Entry(root, bd=10, width=40).grid(row=1,column=0)

eingabefeld2 = Entry(root,bd=10, width=40).grid(row=3,column=0)
Button(root,
       text="entpacken",
       command=entpacken).grid(row=1, column=1)

Button(root,
       text="kompromieren",
       command=kompromieren).grid(row=2, column=1)

root.mainloop()

und das ist der fehler:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1536, in __call__
    return self.func(*args)
  File "/home/pi/Desktop/Selbst-erstellt/Python3/Zippen.py", line 5, in kompromieren
    Kompromierverzeichnis = root.eingabefeld.get()
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1935, in __getattr__
    return getattr(self.tk, attr)
AttributeError: 'tkapp' object has no attribute 'eingabefeld'
Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1536, in __call__
    return self.func(*args)
  File "/home/pi/Desktop/Selbst-erstellt/Python3/Zippen.py", line 5, in kompromieren
    Kompromierverzeichnis = root.eingabefeld.get()
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1935, in __getattr__
    return getattr(self.tk, attr)
AttributeError: 'tkapp' object has no attribute 'eingabefeld'
ich hoffe ihr könnt mir helfen :D

Re: Fehler beim Eingabefeld auswerten

Verfasst: Sonntag 9. Juni 2019, 17:50
von __deets__
Der Fehler sagt doch ganz klar, was das Problem ist: du rufst "root.eingabefeld.get()" auf. root kennt kein solches Attribut. eingabefeld und das grossartig benannte eingabefeld2 sind globale Variablen, auf die du ohne root. zugreifst.

(hier ignorierten Sermon ueber globale Variablen und warum die doof sind einfuegen, siehe gerade aktives Thema von Cortez).

Re: Fehler beim Eingabefeld auswerten

Verfasst: Sonntag 9. Juni 2019, 18:17
von Sirius3
Keine *-Importe. Keine nakten Excepts und die falsche Fehlerbehandlung endet damit, dass es keinen Sinn macht, der lokalen Variable `ausgabetext` irgend einen Wert zu geben, der nie verwendet wird.

Re: Fehler beim Eingabefeld auswerten

Verfasst: Sonntag 9. Juni 2019, 18:48
von Fire Spike
habe das root herausgenommen aber jetzt kommt der Fehle :cry: r:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1536, in __call__
    return self.func(*args)
  File "/home/pi/Desktop/Selbst-erstellt/Python3/Zippen.py", line 5, in kompromieren
    Kompromierverzeichnis = eingabefeld.get()
AttributeError: 'NoneType' object has no attribute 'get'
Die except brauche ich zum falsche eingaben abfangen! :D

Re: Fehler beim Eingabefeld auswerten

Verfasst: Sonntag 9. Juni 2019, 19:23
von __deets__
Zeig bitte den vollen Quelltext wie er JETZT ist. Und trotz gegenteiliger Beteuerung: das ist keine fehlerbehandlung. Sondern Verschleierung. Das eingabefeld None ist, darf nicht sein, und ist ein Fehler, den du beheben musst, aber nicht siehst, wenn du alles einfach abfängst.

Re: Fehler beim Eingabefeld auswerten

Verfasst: Sonntag 9. Juni 2019, 19:32
von Fire Spike
habe die except rausgenommen immer noch gleicher Fehler.
mein jetziger code ist:

Code: Alles auswählen

from tkinter import *
import shutil
ausgabetext = ""
def kompromieren():
    Kompromierverzeichnis = eingabefeld.get()
    Dateinamen = eingabefeld2.get()
    shutil.make_archive(Kompromierverzeichnis, "zip", Dateinamen)
    ausgabetext = "Wurde kompromiert."
    root.update()
    
def entpacken():
    Dateiname = eigabefeld.get()
    Extraktverzeichnis = eingabefeld1.get()
    shutil.unpack_archive(Dateiname, Extraktverzeichnis, "zip")
    ausgabetext = "Wurde entpackt"
    root.update()

root = Tk()
root.title("Archivverwaltung")

Label(root,
      text="Bitte Archivpfad eingeben").grid(row=0, column=0)

Label(root,
      text="Bitte Dateienpfad eingeben").grid(row=2, column=0)

Label(root,
      text=ausgabetext).grid(row=4, column=0, columnspan=2)

eingabefeld = Entry(root, bd=10, width=40).grid(row=1,column=0)

eingabefeld2 = Entry(root,bd=10, width=40).grid(row=3,column=0)
Button(root,
       text="entpacken",
       command=entpacken).grid(row=1, column=1)

Button(root,
       text="kompromieren",
       command=kompromieren).grid(row=2, column=1)

root.mainloop()


Re: Fehler beim Eingabefeld auswerten

Verfasst: Sonntag 9. Juni 2019, 19:38
von __deets__
“eigabefeld”. Schau mal genau hin....

Re: Fehler beim Eingabefeld auswerten

Verfasst: Sonntag 9. Juni 2019, 19:39
von __deets__
Ah. Ich sehe jetzt den Fehler. Du weist den ruckgabewert von grid zu. Das ist ein Fehler. Der ist None. Das grid muss in eine extra Zeile.

Re: Fehler beim Eingabefeld auswerten

Verfasst: Sonntag 9. Juni 2019, 19:44
von Fire Spike
wie in eine extrazeile?

Re: Fehler beim Eingabefeld auswerten

Verfasst: Sonntag 9. Juni 2019, 19:45
von __deets__
So:

eingabefeld = Entry(root, bd=10, width=40)
eingabefeld.grid(row=1,column=0)

Extra. Zeile.

Re: Fehler beim Eingabefeld auswerten

Verfasst: Sonntag 9. Juni 2019, 20:00
von Fire Spike
Danke, es läuft!