Eingabefeld sichtbar/unsichtbar

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
RolandKM
User
Beiträge: 25
Registriert: Montag 21. Dezember 2020, 10:20

Ich möchte über einen Checkbutton ein Eingabefeld sichtbar bzw. unsichtbar machen. Bzgl. Sichtbarkeit funktioniert es, das "Unsichtbarmachen" leider nicht.
Wie kann man das umsetzen ?

Code: Alles auswählen

import tkinter as tk
from tkinter import messagebox

def zusatztext():
   zusatz_text = tk.StringVar(fenster,"")
   if varChk.get() == True:
      messagebox.showinfo(message="eingabefeld sichtbar")
      tk.Entry(fenster, text="Punkt-Nr.", textvariable=zusatz_text, font=("arial", 10), width=12, bd=3).pack()
   else:
      messagebox.showinfo(message="eingabefeld unsichtbar")
      # ???

fenster = tk.Tk()		
varChk = tk.BooleanVar()
cb = tk.Checkbutton(fenster,text="Zeichen anfügen",font=("arial",10),variable=varChk,command=zusatztext).pack()

fenster.mainloop()

Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 3.
Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen, varChk und Fenster kommen aus dem nichts. Man vergleicht nicht explizit auf True, denn das würde ja doch wieder nur True (oder False) ergeben. Benutze keine kryptischen Abkürzungen, Variablennamen schreibt man komplett klein.
Funktionen sollten nach Tätigkeiten benannt werden. Jetzt hast Du das Problem, dass Deine Funktion (fast) gleich wie ein StringVar-Objekt heißt.
Du machst nichts "sichtbar" sondern erzeugst eine neues Entry. Alle Widgets sollten schon zum Zeitpunkt des Erzeugens des Fensters angelegt werden.
cb ist nicht nur ein schlechter Name, sondern auch an None gebunden, was die Variable ziemlich nutzlos macht.

Code: Alles auswählen

import tkinter as tk
from tkinter import messagebox
from functools import partial

def zeige_zusatztext_an(zusatz_text_angezeigt, entry):
    if zusatz_text_angezeigt.get():
        messagebox.showinfo(message="eingabefeld sichtbar")
        entry.pack()
    else:
        messagebox.showinfo(message="eingabefeld unsichtbar")
        entry.pack_forget()

def main():
    fenster = tk.Tk()        
    zusatz_text = tk.StringVar(fenster, "")
    zusatz_text_angezeigt = tk.BooleanVar(fenster)
    entry = tk.Entry(fenster, text="Punkt-Nr.", textvariable=zusatz_text, font=("arial", 10), width=12, bd=3)
    tk.Checkbutton(fenster, text="Zeichen anfügen", font=("arial",10), variable=zusatz_text_angezeigt,
        command=partial(zeige_zusatztext_an, zusatz_text_angezeigt, entry)).pack()
    fenster.mainloop()

if __name__ == "__main__":
    main()
RolandKM
User
Beiträge: 25
Registriert: Montag 21. Dezember 2020, 10:20

Vielen Dank für die umfangreiche Hilfe. Die Möglichkeit der Teil-Funktionen kannte ich noch nicht.
Antworten