Seite 1 von 1

OptionMenu akktualisieren

Verfasst: Freitag 17. Oktober 2014, 09:45
von AndiArbeit
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()

Re: OptionMenu akktualisieren

Verfasst: Freitag 17. Oktober 2014, 10:28
von 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. :-/

Re: OptionMenu akktualisieren

Verfasst: Freitag 17. Oktober 2014, 11:53
von AndiArbeit
@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 ?

Re: OptionMenu akktualisieren

Verfasst: Freitag 17. Oktober 2014, 21:11
von 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()

Re: OptionMenu akktualisieren

Verfasst: Montag 20. Oktober 2014, 06:46
von AndiArbeit
@BlackJack Dankeschön, das hilft mir weiter.

Gruß AndiArbeit