Entry rückgabewert

Fragen zu Tkinter.
Antworten
karsten k
User
Beiträge: 18
Registriert: Dienstag 12. August 2008, 19:25

Hallo.
Ich beschäftige mich gerade mit Tkinter und will ein Programm erstellen, welches
ein (sicheres) Passwort zufällig Generiert.

Code: Alles auswählen


from Tkinter import *

def generate():
	# soll nachher das Passwort generieren
	print widget2.value

fenster = Frame()
fenster.pack()
Label(fenster, text="Dieses Programm generiert ihnen ein sicheres Passwort.").pack()
Label(fenster, text="Bitte geben Sie die Anzahl der zu verwendenen Stellen an!").pack()
widget = Entry(fenster, text="Test")
widget2 = Button(text="generieren", command=generate)
widget.pack()
widget2.pack()
fenster.mainloop()

Anstatt "test" soll nun bei Knopfdruck die Eingabe ausgegeben werden (dann kann ich sie ja weiterverarbeiten) nur leider habe ich kein Plan wie. Gibt es eine Variable (sowas wie widget2.value)? Gruß karsten k
Sage nie, was du weisst. Aber wisse stets, was du sagst!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Vor dem entscheidenden Tipp noch ein paar Hinweise zum "Style":

Den * import bei Tkinter solltest du dir wieder abgewöhnen. Man lädt sich damit einen riesen Haufen in den Namensraum, vermutlich ohne zu wissen, was alles dabei ist. Außerdem kannst du bei Verwendung der Tkinter-Klassen diese gar nicht mehr als solche erkennen. Darum besser so:

Code: Alles auswählen

import Tkinter as tk
Dann entsprechend statt z.B. "Label" mit "tk.Label" aufrufen.

Anstelle des Frame()-Widgets ist es üblich, eine Instanz von Tk zu erzeugen, die heißt dann häufig root. Einen separaten Frame darin brauchst du eigentlich gar nicht (das ist nur so eine Art Container).

Die Bezeichner widget und wigdet2 sind ziemlich unglücklich gewählt, weil sie nun wirklich gar keine Auskunft geben, was sich dahinter verbirgt (naja, fast keine: Ein Widget eben ...).

Ich persönlich verwende dafür nach Möglichkeit Bezeichner, die sowohl einen Information darüber enthalten, um welche Art von Widget es sich hier handelt und zusätzlich, welche Funktion/Inhalt das Widget hat. In deinem Fall - nur ein Entry und Button - würde ich mich auf den Typ beschränken.

Und jetzt der Tipp: Entry-Widgets haben eine Methode get(), die liefert den Inhalt zurück.

Wenn man das alles berücksichtigt, dann könnte dein Code etwa so aussehen:

Code: Alles auswählen

import Tkinter as tk

def generate_pw():
    # soll nachher das Passwort generieren
    print entry.get()

root = tk.Tk()
tk.Label(root, text="Dieses Programm generiert ihnen ein sicheres Passwort.").pack()
tk.Label(root, text="Bitte geben Sie die Anzahl der zu verwendenen Stellen an!").pack()
entry = tk.Entry(root)
button = tk.Button(text="Generieren", command=generate_pw)
entry.pack()
button.pack()
root.mainloop()
Antworten