Problem mit get()

Fragen zu Tkinter.
Antworten
Mathe
User
Beiträge: 11
Registriert: Mittwoch 3. September 2008, 14:41

Hi,

also ich hab hier ein Programm welches dezimalzahlen in hexadezimalzahlen umwandeln soll. Das funktioniert auch gut. Nun wollte ich das ganze schön mit tkinter verpacken, aber ich hab meine schwierigkeiten mit dem get() befehl. Eigentlich will ich den wert, der ins feld "eingabe" eingefügt wird auslesen und dann als variable n weiterbenutzen. Aber irgendwie geht das nicht so wie ich es mir denke. Könnte ihr mir vielleicht helfen?

Code: Alles auswählen

from Tkinter import *

def fenster ():
    
#Grundeinstellung  
    root = Tk ()
    root.title ('Umrechner')
    rahmen = Frame (master = root) 
    rahmen.pack ()
    
#Leerzeilen
    leer = Label (rahmen)
    leer.pack ()

# Einleitung
    name = Label (rahmen, text = "Welche Zahl soll umgewandelt werden?")
    name.pack ()
    
# Eingabefeld
    eingabe = Entry(rahmen)
    eingabe.pack ()
    
# Button
    button = Button(rahmen, text = 'Umrechnen', command = dec2hex)
    button.pack ()

def dec2hex ():
    n = eingabe.get(0.0,END)
    bin=''
    while n>0:
        b=n%16
        bin= str(b)+bin
        n=n/16
    print bin

fenster ()

Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

1. Ohne mainloop() passiert gar nichts.
2. eingabe ist in dec2hex nicht bekannt.
3. get() braucht keine Argumente.
3. Zur Umrechnung gibt es hex()
MfG
HWK
Mathe
User
Beiträge: 11
Registriert: Mittwoch 3. September 2008, 14:41

1. wie ohne mainloop funktioniert gar nichts? er öffnet doch das fenster ganz normal und ich kann auch die werte eingeben und den button drücken.
2. ja das es da nicht bekannt ist, war mir auch bewusst dadurch, dass mir die fehlermeldung das sagt. Wie kann ich den fehler beheben?
3. geändert
4. ich will doch aber mein programm benutzen :D
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Tkinter hat eine Mainloop, mit der Mainloop wird das Fenster am "leben" gehalten, mal einfach ausgedrückt

eingabe != Global, also nicht in einer anderen Funktion verfügbar
the more they change the more they stay the same
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mathe hat geschrieben:1. wie ohne mainloop funktioniert gar nichts? er öffnet doch das fenster ganz normal und ich kann auch die werte eingeben und den button drücken.
Wenn du dein Programm NICHT aus IDLE heraus öffnest (was du zu tun scheinst), dann würde sich das Fenster ohne einen abschließenden Aufruf von mainloop() direkt wieder schließen.

Mathe hat geschrieben:2. ja das es da nicht bekannt ist, war mir auch bewusst dadurch, dass mir die fehlermeldung das sagt. Wie kann ich den fehler beheben?
Variante 1: Einen klassenbasierten Entwurf.
Variante 2: Statt die Funktion dec2hex direkt als Eventhandler einzusetzen stattdessen einen Lambda-Ausdruck als Eventhandler verwenden und diesen dann die Funktion dec2hex MIT PARAMETER aufrufen lassen.
Zuletzt geändert von numerix am Samstag 28. November 2009, 20:35, insgesamt 1-mal geändert.
Mathe
User
Beiträge: 11
Registriert: Mittwoch 3. September 2008, 14:41

ok das mit dem mainloop hab ich jetzt verstanden. werd ich in zukunft drauf achten.
Ich werd das lieber mit klassen probieren zu lösen, denn ich hab leider kein plan was ein Lambda-Ausdruck ist :D
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

http://docs.python.org/tutorial/control ... mbda-forms

Man kann sich lambda als Funktion vorstellen:

Code: Alles auswählen

meine_funktion = lambda x: x + 1
an meine_funktion kann/muss man ein Argument übergeben, das Argument wird um 1 erhöht zurückgegeben

z.B.

Code: Alles auswählen

meine_funktion = lambda x: x + 1
print meine_funktion(2) # --> Ausgabe = 3
//Edit:

Code: Alles auswählen

meine_funktion = lambda x: x + 1
hat den selben Effekt wie:

Code: Alles auswählen

def meine_funktion(x):
    return x + 1
the more they change the more they stay the same
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dav1d hat geschrieben:Man kann sich lambda als Funktion vorstellen:

Code: Alles auswählen

meine_funktion = lambda x: x + 1
Braucht man sich nicht vorstellen, lambda-Ausdrücke *sind* Funktionen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten