Seite 1 von 1

Texteingabe

Verfasst: Samstag 29. Mai 2010, 17:32
von morgoth
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"

Re: Texteingabe

Verfasst: Samstag 29. Mai 2010, 17:34
von EyDu

Re: Texteingabe

Verfasst: Samstag 29. Mai 2010, 18:24
von morgoth
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)

Re: Texteingabe

Verfasst: Samstag 29. Mai 2010, 18:47
von numerix
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.

Re: Texteingabe

Verfasst: Samstag 29. Mai 2010, 20:12
von problembär
Guckstu. Ganz viel Variabel, ganz viel Gedancken.

Re: Texteingabe

Verfasst: Samstag 29. Mai 2010, 21:52
von morgoth
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

Re: Texteingabe

Verfasst: Samstag 29. Mai 2010, 22:11
von 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…

Re: Texteingabe

Verfasst: Sonntag 30. Mai 2010, 07:07
von wuf
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: