OptionMenu akktualisieren

Fragen zu Tkinter.
Antworten
AndiArbeit
User
Beiträge: 21
Registriert: Freitag 11. Juli 2014, 13:26

Hallo liebes Python Forum,

ich habe gerade ein Problem auf das ich keine Antwort finde.

Ich habe in Tkinter ein OptionMenu dropdown Menü.

Jetzt möchte ich nachträglich den Inhalt des Optionmenüs ändern (also den Inhalt von "daten" aktuallisieren).

Kann mir jemand darauf eine Antwort geben ?

Ist wahrscheinlich eine Dumme Frage aber ich komm gerade nicht weiter.

Vielen Dank im Vorraus

AndiArbeit

Code: Alles auswählen


from Tkinter import *
root = Tk()

daten = ["Dat1","Dat2","Dat3"]

projekte_var = StringVar()
projekte_var.set(daten[0])
dropdown = OptionMenu(root, projekte_var , *daten )
dropdown.pack(expand=1 , fill=X , side=LEFT )

root.mainloop()
BlackJack

@AndiArbeit: Man muss such das Menu-Objekt geben lassen, dort alle Einträge löschen, und dann die aktualisierten hinzufügen. Also `command` dabei jeweils eine Funktion übergeben welche das dazugehörige `*Var`-Objekt mit dem Wert setzt. Also eigentlich pfuscht man da in den Interna von so einem `OptionMenu` herum, weil das keine Veränderung des Inhalts vorsieht. :-/
AndiArbeit
User
Beiträge: 21
Registriert: Freitag 11. Juli 2014, 13:26

@BlackJack
Dankeschön, habe aber auf eine simplere Lösung gehofft :wink:

Ich bin mir jetzt nicht sicher wie ich die Informationen anfordere und mit "command" bearbeite. Hat jemand vielleicht ein kurzes Beispiel für mich wie das in etwa auszusehen hat ?
BlackJack

Code: Alles auswählen

#!/usr/bin/env python
from __future__ import absolute_import, division, print_function
import Tkinter as tk
from functools import partial


def update_option_menu(option_menu, var, values):
    menu = option_menu['menu']
    menu.delete(0, tk.END)
    for value in values:
        menu.add_command(label=value, command=partial(var.set, value))
    var.set(values[0])


def main():
    project_names = ['Projekt A', 'Projekt B', 'Projekt C']
    
    root = tk.Tk()
    project_var = tk.StringVar(root)
    
    menu = tk.OptionMenu(root, project_var, [])
    menu.pack()
    update_option_menu(menu, project_var, project_names)

    root.mainloop()


if __name__ == '__main__':
    main()
AndiArbeit
User
Beiträge: 21
Registriert: Freitag 11. Juli 2014, 13:26

@BlackJack Dankeschön, das hilft mir weiter.

Gruß AndiArbeit
Antworten