Texteingabe

Fragen zu Tkinter.
Antworten
morgoth
User
Beiträge: 8
Registriert: Mittwoch 26. Mai 2010, 22:19

Hallo
Ich habe ein kleines verschluesselungs programm geschrieben, damit es ein bisschen "schöner" aussieht wollte ich mit tkinter das menü usw. bearbeiten. Dabei bin ich auf folgendes Problem gestoßen. ich möchte eine Funktion schreiben die ein Text-Fenster oder eine Texteingabe öffnet und die den eingegebenen Text als string zurück gibt. Ich habe an ein Button
gedacht der wenn man auf ihn drückt das Fenster schliest und den Text zurück gibt.
Mein Programm sieht folgendermasen aus

Code: Alles auswählen

from tkinter import *
def abfragemain():
    
    def antwort ():   
       fenster.destroy() 
    fenster = Tk ()
    eingabe=Entry(fenster)
    eingabe.pack()
    but=Button(fenster,text="Fertig",command = antwort)
    but.pack()      
   
    fenster.mainloop ()
        

abfragemain()
ich hab aber keine Ahnung wie ich es anstellen muss damit es als Rueckgabewert den eingegebenen Text zurück
gibt
MFG Morgoth
PS Sorry meine Ausdrucksweise ist ein bisschen "unfachlich"
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Das Leben ist wie ein Tennisball.
morgoth
User
Beiträge: 8
Registriert: Mittwoch 26. Mai 2010, 22:19

Hallo
Danke fuer den Tipp, aber die Anleitung löst mein Problem auch nicht, da ich dort nicht herausgefunden habe wie ich die eingabe in einer Variabel speichere. Mein Problem ist das antwort() über den Buttondruck ausgefuert wird
und deshalb nicht in einer Variabel gespeichert werden kann.
Dieses programm zeigt meinen Gedancken der aber nicht funktioniert.

Code: Alles auswählen

a=0

def abfragemain():
    
    def antwort ():   
       a = eingabe.get()
       fenster.destroy() 
       return a
    fenster = Tk ()
    eingabe=Entry(fenster)
    eingabe.pack()
    but=Button(fenster,text="Fertig",command = antwort)
    but.pack()      
   
    fenster.mainloop ()
        

abfragemain()
print (a)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Das wäre jetzt die Stelle, wo du dir ernsthaft überlegen solltest, auf einen klassenbasierten Entwurf umzusteigen, wenn du nicht mit "global" um dich werfen und den Code kaputt machen willst.
problembär

Guckstu. Ganz viel Variabel, ganz viel Gedancken.
morgoth
User
Beiträge: 8
Registriert: Mittwoch 26. Mai 2010, 22:19

Ich hab es jetzt nach dem Tipp mit viel global zu arbeiten.
Das mit der Klasse war mir zu viel zu denken (oder ich hab mich blöd angestellt was ich eher glaube)
Egal ich hab es hinbekommen:

Code: Alles auswählen

global a
def abfragemain():
    
        def antwort ():   
           global a
           a = eingabe.get()
           fenster.destroy() 
       
        fenster = Tk ()
        eingabe=Entry(fenster)
        eingabe.pack()
        but=Button(fenster,text="Fertig",command = antwort)
        but.pack()      
   
        fenster.mainloop ()
Und dann ist in a die Eingabe gespeichert. Also ich finde das geht einigermasen mit der Anzahl von global
BlackJack

@morgoth: Du hast doppelt soviele ``global`` wie notwendig wären, aber auch eines ist zuviel. Das ist einfach Mist. Wenn Du nicht denken magst, lass die Finger vom Programmieren…
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo morgoth

Hier noch eine Variante von vielen:

Code: Alles auswählen

import Tkinter as tk
    
def antwort():   
    print fenster.eingabe.get()
    fenster.destroy() 
   
def abfrage_main():   
    fenster.eingabe = tk.Entry(fenster)
    fenster.eingabe.pack()

    fenster.button = tk.Button(fenster, text="Fertig", command=antwort)
    fenster.button.pack()      
 
fenster = tk.Tk()

abfrage_main()
fenster.eingabe.focus_set()

fenster.mainloop()
Gruss wuf :wink:
Take it easy Mates!
Antworten