Seite 1 von 1

tkinter neuling... findet den fehler nicht!

Verfasst: Montag 17. Dezember 2007, 15:01
von mulder
moin

ich moechte "nur" das ueber einem button der inhalt eines "Entry" in eine variable ( oder erstmal auf die commandozeile) ausgeben wird ..

aber ... ich krieg immer wieder den fehler ..
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
return self.func(*args)
File "<pyshell#57>", line 2, in HOLE
File "C:\Python25\lib\lib-tk\Tkinter.py", line 2371, in get
return self.tk.call(self._w, 'get')
TclError: invalid command name ".16747056"
hier der code .. ich ahbe die funktion "HOLE" jetzt soo weit abgespeckt und finde den fehler immer noch nicht!

Code: Alles auswählen

from Tkinter import *

root = Tk()

class FENSTER:
	def __init__(self, master):
		frame = Frame(master)
		frame.pack()
		self.info = Label(frame, text='Maschine?')
		self.inpt = Entry(frame)
 		self.button = Button(frame,text='Quit', fg='red', command=frame.quit)
		self.GET = Button(frame, text='Eingabe', command=HOLE)
		self.GET.pack(side=RIGHT)
		self.info.pack(side=RIGHT)
		self.inpt.pack()
		self.button.pack(side=LEFT)

	def HOLE():
		print self.inpt.get()


app = FENSTER(root)

root.mainloop()

Verfasst: Montag 17. Dezember 2007, 15:16
von BlackJack
Bitte zeige immer Quelltext und Traceback die zusammengehören. Die Fehler in dem Quelltext sind sehr einfach zu finden weil sie sehr deutliche Fehlermeldungen ausgeben. Nämlich ein Einrückungsfehler in Zeile 12, dann dass der globale Name `HOLE` nicht existiert und wenn man das korrigiert, dass `HOLE()` keine Argumente erwartet, beim Druck auf den Button aber eines bekommt. Wenn man die alle drei behebt, funktioniert das Programm. Die Fehlermeldung die angeblich bei Dir kommt, ist dabei nicht zu sehen.

Verfasst: Montag 17. Dezember 2007, 15:24
von mulder
erstmal ..

danke ..

ABER ... die fehlermeldung kommt bei mir! ... ?? ..warum weiss ich nicht .. :shock:

aber trotzdem danke ...
mal schaun ob ich jetzt trotzdem hinkrieg!...

Verfasst: Montag 17. Dezember 2007, 15:31
von BlackJack
Mit dem Quelltext den Du gepostet hast bekommst Du einen `IndentationError` vom Compiler, also bevor das Programm überhaupt läuft! Da kannst Du die Fehlermeldung nicht bekommen.

Verfasst: Montag 17. Dezember 2007, 15:43
von mulder
okay .. ich hab (den ersten teil) gefunden!...

also ...ertmal den IDLE neugestartet ... :roll: sorry ... dann kamen auch wirklich lesbare fehlermeldungen..

aber ich finde den fehler ... oder besser das argument in der Button zeile nicht! :.

Code: Alles auswählen

self.GET = Button(frame, text='Eingabe', command=self.HOLE() )
???

Verfasst: Montag 17. Dezember 2007, 15:47
von BlackJack
Du rufst dort die Funktion auf statt sie zu übergeben. Klammern hinter einem Namen bedeuten "ausführen, **jetzt**". An `command` wird also der *Rückgabewert* von ``self.HOLE()`` gebunden.

Verfasst: Samstag 29. Dezember 2007, 16:00
von Markus12
Ich glaube er hat es immer noch nicht verstanden^^

So sieht der Quelltext aus, wenn die Fehler behoben sind...

Code: Alles auswählen

from Tkinter import *

root = Tk()

class FENSTER:
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()
        self.info = Label(frame, text='Maschine?')
        self.inpt = Entry(frame)
        self.button = Button(frame,text='Quit', fg='red', command=frame.quit)
        self.GET = Button(frame, text='Eingabe', command=self.HOLE)
        self.GET.pack(side=RIGHT)
        self.info.pack(side=RIGHT)
        self.inpt.pack()
        self.button.pack(side=LEFT)

    def HOLE(self):
        print self.inpt.get()


app = FENSTER(root)

root.mainloop() 

Verfasst: Mittwoch 2. Januar 2008, 14:07
von mulder
@ markus12 ..... danke .. aber ich hatte es (damals) schono verstanden .. :wink: