Passwort anzeigen lassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
adam
User
Beiträge: 1
Registriert: Freitag 12. Februar 2021, 11:59

Hallo,
ich versuche gerade als Neuling ein Anmelde-Interface zu erstellen und dabei hab ich eingestellt, dass alles im Eingabefeld des Passwortes in "*" angezeigt wird. Nun will ich eine Schaltfläche hinzufügen, die das Passwort "normal" anzeigen lässt.

So sieht der Code momentan aus:

Code: Alles auswählen

eingabefeld_wert_p = tk.StringVar()
eingabefeld_p = tk.Entry(root, textvariable=eingabefeld_wert_p, show="*", font=("times", 13))
eingabefeld_p.place(x="100", y="180", width="200", height="30")
eingabefeld_wert_p.set('Passwort')
passanzeigen = tk.Button(root, text="Password anzeigen", comman=anzeigen_p).place(x="100", y="215")
Die Funktion dazu:

Code: Alles auswählen

def anzeigen_p():
    global eingabefeld_p
    eingabefeld_p = tk.Entry(show=str)
1. Wie muss die Funktion dazu aussehen?
2. Ich möchte keinen normalen Button sondern ein Kästchen, das ein Kreuz hat wenn es aktiviert ist. Wie mach ich das? Brauch ich ein bestimmtes Modul?

Vielen Dank im Voraus!!

Ps: Hab den Rechtschreibfehler "comman" schon entdeckt und geändert.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Du darfst kein neues Eingabefeld erzeugen, sondern mußt das bestehende neu konfigurieren.
Globale Variablen sollte man nicht benutzen. Alles was eine Funktion braucht, bekommt sie über ihre Argumente. Bei command= hilft hierbei functools.partial.
Warum haben alle Variablen das Postfix _p? Wenn das Passwort heißen soll, warum schreibst Du es dann nicht aus? Dann muß man auch nicht rätseln.
`place` sollte man nicht benutzen, weil das bei unterschiedlichen Bildschirmauflösungen zu Problemen führen kann. Benutze grid oder pack.
`passanzeigen` hat den Wert None, ist also ziemlich überflüssig.

Code: Alles auswählen

import tkinter as tk
from functools import partial

def anzeigen(entry):
    entry['show'] = ""

def main():
    root = tk.Tk()
    password = tk.StringVar(root, "Passwort")
    password_entry = tk.Entry(root, textvariable=password, show="*", font=("times", 13))
    password_entry.pack()
    tk.Button(root, text="Password anzeigen", comman=partial(anzeigen, password_entry)).pack()
    root.mainloop()

if __name__ == "__main__":
    main()
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Um noch das 2. aus der Frage zu beantworten: das Kästchen mit Kreuzchen/Haken bekommt man mit einem `Checkbutton`:

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter as tk


def main():
    root = tk.Tk()
    password_var = tk.StringVar(value="Passwort")
    show_var = tk.StringVar(value="*")

    password_entry = tk.Entry(
        root, textvariable=password_var, show=show_var.get()
    )
    password_entry.pack()
    tk.Checkbutton(
        root,
        text="Password anzeigen",
        variable=show_var,
        onvalue="",
        offvalue="*",
        command=lambda: password_entry.config(show=show_var.get()),
    ).pack()
    root.mainloop()


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten