2016-06-28 12 views
2

Ich versuche ein Programm zu erstellen, das bei einer Reihe von Benutzereingaben eine Funktion ausführt. Einige der Benutzereingaben sind nur unter bestimmten Umständen erforderlich, und ich möchte, wenn möglich, nur die Eingabefelder und Beschriftungen für diese Eingabewerte anzeigen, wenn eine Prüfschaltfläche ausgewählt wird, die angibt, dass die Umstände, die diese Eingaben erfordern, vorhanden sind. Was ich nicht weiß, wie zu tun ist:Wie Widgets in Tkinter ein-/ausblenden?

  • Setzen Sie die Labels und Eingabefelder, die ich zwischen Zeilen hinzufügen, die bereits vorhanden sind.

  • "Verbergen" Sie die Labels und Eingabefelder, wenn die Check-Schaltfläche deaktiviert ist, ohne dass sie erneut angezeigt werden, ohne bereits eingegebene Daten zu verlieren, wenn die Check-Schaltfläche erneut ausgewählt wird.

  • Beispiel: Ich wähle die Check-Taste, gebe Daten in die neuen Kästchen ein, die angezeigt werden, und deaktiviere dann die Check-Taste (wodurch die Kästchen nicht mehr angezeigt werden). Wenn ich die Check-Taste erneut ankreuzen sollte, sollten die Daten, die ich bei der letzten Auswahl der Check-Taste eingegeben habe, immer noch dort sein.
  • "Anzeigen" die gleichen Labels und Eingabefelder, die zuvor "ausgeblendet" wurden, wenn die Checkbutton-Schaltfläche erneut ausgewählt wird, nachdem sie zuvor festgelegt wurde.

  • Ich weiß nicht, ob so etwas überhaupt möglich ist, aber wenn nicht, lass es mich wissen. Mir ist auch bewusst, dass ich einfach die entsprechenden Eingabefelder "state" auf DISABLED setzen könnte, während die Check-Schaltfläche deaktiviert ist, aber ich würde es vorziehen, wenn die Boxen nicht erscheinen würden, damit ihre Anwesenheit nicht verwirrte Benutzer verwirrt die Umstände, unter denen die zusätzlichen Eingaben notwendig sind.

    Wenn dies relevant ist, verwende ich Python 2.7.9, Anaconda 2.2.0 (64-Bit) und Tkinter Version 81008 auf Windows 10 Pro. Fühlen Sie sich frei, weitere Informationen anzufordern, wenn ich etwas ausgelassen habe, das nützlich wäre zu wissen. Vielen Dank im Voraus für jede Hilfe, die Sie leisten können.

    Antwort

    2

    Ich denke, Sie wollen grid_remove().

    Von http://www.tkdocs.com/tutorial/grid.html:

    Die „vergessen“ Methode der Raster, wobei als Argumente eine Liste von einem oder mehreren Slave-Widgets können, verwendet werden, Sklaven entfernen aus dem Netz sind sie derzeit Teil . Dies zerstört das Widget nicht komplett, aber entfernt es vom Bildschirm, als ob es nicht in der ersten Stelle gerastert worden wäre. Sie können es später erneut ausrichten, obwohl alle ursprünglich zugewiesenen Gitteroptionen verloren gegangen sind.

    Die "Remove" -Methode des Gitters funktioniert gleich, außer dass die Gitter Optionen in Erinnerung bleiben.

    Hässliches Beispiel folgt. Spielen Sie mit den Rasteroptionen und dem Eintragstext, um zu sehen, wie sie erhalten bleiben.

    def toggle_entry(): 
        global hidden 
        if hidden: 
         e.grid() 
        else: 
         e.grid_remove() 
        hidden = not hidden 
    
    hidden = False 
    root = tk.Tk() 
    e = tk.Entry(root) 
    e.grid(row=0, column=1) 
    tk.Button(root, text='Toggle entry', command=toggle_entry).grid(row=0, column=0) 
    root.mainloop() 
    
    +0

    In Ordnung, macht Sinn soweit. Wie würde ich die entfernten Widgets wieder in das Grid einfügen? Würde ich die '.grid()' Methode für sie aufrufen? – train1855

    +0

    Ja, siehe Beispiel.Ich denke, es gibt ähnliche Methoden für andere Grid-Manager wie "pack". – Goyo

    Verwandte Themen