Entry eingabe

Fragen zu Tkinter.
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

Hallo,

ich brauch in einem Frame ein entry fenster, in das man was eingibt, dann enter drückt und der inhalt dann als variable genommen wird.
nach dem ganzen, soll das eingabefeld wieder leer erscheinen und das ganze von vorne, bis man 4 variablen hat.

Kann mir irgendwer erklären wie ich das mach???

Vielen Dank
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Ravenlord

Probier es mal mit dem Modul
SimpleDialog.py aus dem
Tkinter-Verzeichnis /lib-tk.

Gruss wuf :wink:
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

kannst du mir evtl den kompletten tag geben? :roll:
hab keine genaue ahnung was ich machen soll :oops:


danke vielmals
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Ravenlord

Sorry ich habe dir das falsche Skript
angegeben. Es heisst nicht nur
SimpleDialog.py

sondern
tkSimpleDialog.py

Das Skript sollte sich auch im
Verzeichnis /python2.3/lib_tk befinden.

Du musst das Skript einfach in die Idle-
Umgebung laden und starten. Oder aus
einem Terminal starten.

Es zeigt hintereinander drei Eingabe-Dialoge.
Einer für Strings, einer für Floats und einer
für Integers. Die drei Dialoge werden nicht
alle auf einmal gezeigt, sondern nach Bestätig-
ung des einen kommt der andere.

Du kannst das Skript einmal durchschauen, es
lehnt sich stark an OOP.

Good Luck
Gruss wuf :wink:
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

tut mir leid, das is mir irgendwie zu hoch :oops:
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Der genaue pfad ist bei mir unter Debian-Linux

/usr/lib/python2.3/lib-tk/tkSimpleDialog.py


Gruß

Dookie
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

ja soweit bin ich schon ... aber wie genau bau ich das jetz in den frame als eingabefeld ein?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

also in einen frame kannst du kein fenster einbauen, oder meinst du einfach nur ein entry-widget?


Dookie
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

ein entry widget, in das ich was eingebe und dann einfach enter drücke und die eingabe einer variablen zugewiesen wird...
brauch ich für die Eingabe der Farben von meinem kleinen Mastermind ;)
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Ravelord

Alles klar. Hier ist ein
einfacheres Beispiel:

Code: Alles auswählen

import sys
from Tkinter import *

def Beenden():
    sys.exit(0)

# Funktion für die Ausgabe
def Ausgabe(event):
	lb["text"] = 'Ausgabe: ' + eingabe.get()
	eingabe.set(0)


root = Tk()
root.title('Eingabe')

# Zeichensatz für die Ausgabe
font = ('Helvetica',20,'bold')

eingabe = StringVar()
eingabe.set(0)

# Eingabefeld
e = Entry(root,textvariable=eingabe,bg='white')
e.pack()
# Ausgabe mit Enter-Taste
e.bind("<Return>",Ausgabe)

# Label für die Ausgabe
lb = Label(root,
			fg='blue',
			text = 'Ausgabe: ' + eingabe.get(),
			font = font,
			)
lb.pack(pady = 10)

# Button für Beenden
bende = Button(root, text = "Ende", command = Beenden)
bende.pack(side= 'bottom')

root.mainloop()

Gruss wuf :wink:
Take it easy Mates!
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

du bist ein schatz danke *fg*

e.bind("<Return>",Ausgabe)

die zeile hab ich gesucht ;)


aber noch was anderes in dem zusammenhang:

wie kann ich noch einstellen, dass der solange nix machen soll, bis ich da was eingegeben hab???

mfg + thx


/edit 10min später ;)
sry das ich nerve, habs jetz geschafft *froi*

/edit nochmal

hm irgendwie bekomm ich das doch nich auf die reihe :(
also ich hab jetz das eingabe feld, kann was eingaben, das wird an die liste angehängt und jetz brauch ich nur noch die möglichkeit, das nach der 4ten eingabe, eine andere funktion ausgeführt wird.






danke an alle!
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

probiers mal mit ner for schleife.
frag mich nich wie, ich hab noch nie eine unter python benutzt. :D
(in php find ich sie besser....)
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

dann wartet der aber nich bis ich was eingegeben hab, sondern malt mir 4 input fensterchen und dann will er den inhalt überprüfen, der is aber noch nich da :/
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

schau halt wie lange die liste der eingaben ist

Code: Alles auswählen

if len(liste) < 4:
    liste.append(eingabe)
else:
    #mach was anderes
ansonst nen stückchen Code in code-tags wär nett, dann kann man konkreter werden.


Gruß

Dookie
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

das würde aber heißen, das ich noch ein fünftes mal was eingeben muss, damit der beendet...
so sieht der code an der stelle aus:

Code: Alles auswählen

Fenster = Tk()
frame1 = Frame(Fenster, relief = RIDGE, borderwidth =2)
frame1.pack(fill=NONE, side = LEFT)
frame2 = Frame(Fenster, relief = RIDGE, borderwidth = 2)
frame2.pack(fill="y", side = RIGHT)
canvas = Canvas(frame1 ,height = 800)
canvas.pack()
canvas2 = Canvas(frame2, height = 300, width = 150)
canvas2.pack()

eingabe = StringVar() 
eingabe.set(0)
# Eingabefeld 
e = Entry(frame2,textvariable=eingabe,bg='white') 
e.pack() 
# Ausgabe mit Enter-Taste 
e.bind("<Return>",Zuweisen)
  
Grundstellung()   #hier malt der mir das leere Mastermind spielfeld

bende = Button(frame1, text = "Ende", command = Beenden) 
bende.pack(side= 'bottom') 



Fenster.mainloop()  <= das is dem entsprechend falsch, und hier will ich nach der 4ten eingabe in der Liste raus^^

#####weiter gehts dann mit der umwandlung in farben und den vergleich 


z = {"rot" : 1, "gruen": 2, "lila": 3, "blau": 4, "gelb": 5, "grau": 6}
Liste = map(lambda x: z[x], Liste)
Richtig = []


# Vergleich
for element in Liste[:1]:
    a1 = element
for element in Liste[1:2]:
    b1 = element
for element in Liste[2:3]:
    c1 = element
for element in Liste[3:4]:
    d1 = element
...
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

da fehlt die entscheidende funktion "Zuweisen" in dieser musst Du abfragen, wieviele Eingaben schon gemacht wurden und kannst entsprechend etwas anderes machen, also das Entrywidget für weitere Eingaben sperren und die Eingaben auswerten.


Gruß

Dookie
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

Code: Alles auswählen

def Zuweisen(event):
    test = eingabe.get()
    Liste.append(test)
    eingabe.set(0)
    if len(liste) == 4: 
           ????
wo ich wieder bei der ursprünglichen frage wäre ;) mit welchem befehl komm ich aus dem mainloop raus?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

also rauskommen tutst du mit mainquit(), aber bei einem ereignisgesteuertem GUI-Programm geht mann erst beim Beenden aus dem mainloop raus und erledtigt alles im mainloop. Ruf nach dem if len(Liste) == 4: einfach eine Funktion auf, die dann die Auswertung der Eingaben erledigt, das Spielfeld neuzeichnet...


Gruß

Dookie
Ravenlord
User
Beiträge: 21
Registriert: Samstag 31. Januar 2004, 13:30

ok ^^ dann wirds unübersichtlich *G* glaub ich schreib das ganze nochmal von vorne, hoff dann wirds endlich was ;)

danke schonmal für die hilfe!
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Ravenlord

Wo sind die Funktionen
Zuweisen und Grundstellung
in deinem Skript?

Es wäre interessant zu sehen
was in diesen Funktionen ab-
läuft.

Was möchstest du als nächstes
genau machen in Stichworten?

Gruss wuf :roll:
Take it easy Mates!
Antworten