Optionsmenu weitere Option hinzufügen

Fragen zu Tkinter.
Antworten
Benutzeravatar
Dennis89
User
Beiträge: 1121
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Abend,

ich habe mal eine Frage an euch oder eine Bitte. Entweder müssen mal alle die Füße hoch halten, weil irgendwer auf meiner Leitung steht, da die Frage ganz banal zu beantworten ist und ich heute Abend keine Suchmaschinen bedienen kann oder es ist tatsächlich etwas besonders.

Ich habe mit tkinter ein Options-Menü erstellt. Die Objekte die man auswählen kann stammen aus einer Liste. Es kann aber vorkommen, dass ich ein neues Objekt erstellen will und dies soll dann auch in dem Menü zur Auswahl bereit stehen. Und genau das bekomme ich nicht hin. Ich finde immer wieder 'add_command', aber so etwas wie 'add_option' das mir nur ein weiteres Objekt in das Menü hinzufügt, finde ich nicht.

Ich finde nicht mal eine Doku von tkinter, in der das Optionmenu beschrieben ist.
Ja ich habe zwar fast den ganzen Tag mit Python verbracht, aber so durch den Wind kann ich doch noch nicht sein :|

Ich habe ein Beispiel geschrieben, durch Klick auf den Button soll einfach die '4' in das Optionsmenu hinzugefügt werden:

Code: Alles auswählen

#!/usr/bin/env python3

import tkinter


class App(tkinter.Frame):
    def __init__(self, master):
        tkinter.Frame.__init__(self, master)       
        self.menu_elements = ['1', '2', '3']
        self.menu_choice = tkinter.StringVar(self)
        self.menu_choice.set(self.menu_elements[0])
        self.option_menu = tkinter.OptionMenu(self, self.menu_choice, *self.menu_elements)
        self.option_menu.grid(row=0, column=0)
        tkinter.Button(self, text='Ok', command=self.new_option).grid(row=11,column=0)
        
    def new_option(self):
        self.menu_elements.append('4')
        

def main():
    root = tkinter.Tk()
    root.title('Nur ein Test')
    app = App(root)
    app.pack()
    app.mainloop()

if __name__ == "__main__":
    main()
Danke für eure Hilfe.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das menu Weiss nix von deinen Elements. Die werden kopiert, sie einfach zu ändern bringt also nix. add_command ist laut https://stackoverflow.com/questions/175 ... g-a-button der Weg.
Benutzeravatar
Dennis89
User
Beiträge: 1121
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Abend __deets__

vielen Dank für den Link, damit hat es funktioniert. Weis echt nicht wieso ich das nicht gefunden habe.

Mit dem Code-Beispiel von mir wollte ich nur zeigen, was mein Ziel ist.

Jetzt kann ich beruhigt schlafen :D

Hier noch der funktionierende Code, falls es mal jemand benötigt.

Code: Alles auswählen

#!/usr/bin/env python3

import tkinter


class App(tkinter.Frame):
    def __init__(self, master):
        tkinter.Frame.__init__(self, master)       
        self.menu_elements = ['1', '2', '3']
        self.menu_choice = tkinter.StringVar(self)
        self.menu_choice.set(self.menu_elements[0])
        self.option_menu = tkinter.OptionMenu(self, self.menu_choice, *self.menu_elements)
        self.option_menu.grid(row=0, column=0)
        tkinter.Button(self, text='Ok', command=self.new_option).grid(row=11,column=0)
        
    def new_option(self):
        self.menu_elements.append('4')
        self.option_menu['menu'].delete(0, 'end')
        for choice in self.menu_elements:
            self.option_menu['menu'].add_command(label=choice, command=tkinter._setit(self.menu_elements, choice))
        

def main():
    root = tkinter.Tk()
    root.title('Nur ein Test')
    app = App(root)
    app.pack()
    app.mainloop()

if __name__ == "__main__":
    main()
Gute Nacht
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten