tkinter neuling... findet den fehler nicht!

Fragen zu Tkinter.
Antworten
mulder
User
Beiträge: 49
Registriert: Montag 15. Oktober 2007, 10:36
Wohnort: nürnberg

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()
" schlimmer als stress ist, keinen zu haben"
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.
mulder
User
Beiträge: 49
Registriert: Montag 15. Oktober 2007, 10:36
Wohnort: nürnberg

erstmal ..

danke ..

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

aber trotzdem danke ...
mal schaun ob ich jetzt trotzdem hinkrieg!...
" schlimmer als stress ist, keinen zu haben"
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.
mulder
User
Beiträge: 49
Registriert: Montag 15. Oktober 2007, 10:36
Wohnort: nürnberg

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() )
???
" schlimmer als stress ist, keinen zu haben"
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.
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main

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() 
mulder
User
Beiträge: 49
Registriert: Montag 15. Oktober 2007, 10:36
Wohnort: nürnberg

@ markus12 ..... danke .. aber ich hatte es (damals) schono verstanden .. :wink:
" schlimmer als stress ist, keinen zu haben"
Antworten