tkinter aktivieren/deaktivieren Menü

Brauche ich etwas Hilfe in diesem.
Ich will, dass die Benutzer zur Anmeldung ...
sobald er angemeldet ist, nur das Menü entsprechend die module, die er zugreifen darf, werden aktiviert.
Ich muss also deaktiviert alle Menüs (außer Datei und Hilfe) in der Anfang..
und ich brauchen, um das entsprechende Menü nach dem login...

den login-code ist noch gar nicht geschrieben.. ich will einfach nur, um zu sehen, wie zu tun, dass...
Mein code ist unten:

import Tkinter as tk

class gv:
    w = 800
    h = 500
    title = 'gsm ...'
    MDLS =   [['File','Settings','_s','Quit'],
            ['main menu','mm1','mm2'],
            ['second menu','sm1','sm2','sm3'],
            ['Help','About']]

class GammaSoft(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master, width=gv.w, height=gv.h)
        self.master.title(gv.title)
        self.master.resizable(0,0)
        self.pack_propagate(0)
        self.pack()

        menu_bar = tk.Menu()
        self.nMenu = []
        mc = 0
        for MDL in gv.MDLS:
            self.nMenu.append(tk.Menu(menu_bar, tearoff=0))
            for itm in MDL[1:]:
                if itm == '_s':
                    self.nMenu[mc].add_separator()
                else:
                    self.nMenu[mc].add_command(label=itm, command=lambda itm=itm: self.menu_call(itm))
            menu_bar.add_cascade(label=MDL[0], menu=self.nMenu[mc])
            mc += 1
        self.master.config(menu=menu_bar)

        frame1 = tk.Frame(self)
        frame1.pack()
        lblUsername = tk.Label(frame1, text='Username: ')
        lblPassword = tk.Label(frame1, text='Password: ')
        lblModule = tk.Label(frame1, text='Module: ')
        lblSpace1 = tk.Label(frame1, text='      ')
        lblSpace2 = tk.Label(frame1, text='      ')
        self.Username_var = tk.StringVar()
        self.txtUsername = tk.Entry(frame1, textvariable=self.Username_var, width=14)
        self.Password_var = tk.StringVar()
        self.txtPassword = tk.Entry(frame1, textvariable=self.Password_var, show="x", width=14)
        self.Module_var = tk.StringVar()
        options = [Li[0] for Li in gv.MDLS[1:len(gv.MDLS)-1]]
        self.Module_var.set(options[0])
        self.cmbModule = tk.OptionMenu(frame1, self.Module_var, *tuple(options))
        self.cmbModule.config(takefocus=1, width=14)
        self.btnLiLo = tk.Button(frame1, text='Log in', command=self.LiLo)

        lblUsername.pack(side=tk.LEFT)
        self.txtUsername.pack(side=tk.LEFT)
        lblSpace1.pack(side=tk.LEFT)
        lblPassword.pack(side=tk.LEFT)
        self.txtPassword.pack(side=tk.LEFT)
        lblSpace2.pack(side=tk.LEFT)
        lblModule.pack(side=tk.LEFT)
        self.cmbModule.pack(side=tk.LEFT)
        self.btnLiLo.pack(side=tk.RIGHT)

        separator = tk.Frame(self,height=2, bd=1, relief=tk.SUNKEN)
        separator.pack(fill=tk.X, padx=5, pady=5)

        frame2 = tk.Frame(self)
        frame2_up = tk.Frame(frame2)
        frame2_up.pack(fill=tk.X, side=tk.TOP)
        frame2_dn = tk.Frame(frame2)
        frame2_dn.pack(fill=tk.BOTH, side=tk.BOTTOM)

        lblFilter = tk.Label(frame2_up, text='Filter Text: ')
        lblAt = tk.Label(frame2_up, text='At: ')
        lblSpace3 = tk.Label(frame2_up, text='      ')
        self.Filter_var = tk.StringVar()
        self.txtFilter = tk.Entry(frame2_up, textvariable=self.Filter_var, width=14)
        self.At_var = tk.StringVar()
        self.cmbAt = tk.OptionMenu(frame2_up, self.At_var, '')
        self.cmbAt.config(takefocus=1, width=14)
        self.btnGo = tk.Button(frame2_up, text='Apply')
        self.btnClr = tk.Button(frame2_up, text='Clear')
        lblFilter.pack(side=tk.LEFT)
        self.txtFilter.pack(side=tk.LEFT)
        lblSpace3.pack(side=tk.LEFT)
        lblAt.pack(side=tk.LEFT)
        self.cmbAt.pack(side=tk.LEFT)
        self.btnClr.pack(side=tk.RIGHT)
        self.btnGo.pack(side=tk.RIGHT)

        frame2.pack(fill=tk.BOTH)
        self.log_out

    def log_out(self):
        pass

    def LiLo(self):
        pass

    def print_out(self):
        print('%s, %s!' % (self.greeting_var.get().title(), self.recipient_var.get()))

    def menu_call(self, data):
        print "Once more, clicked /commanded %s" % data

    def run(self):
        self.mainloop()

app = GammaSoft(tk.Tk())
app.run()
  • Ich habe bemerkt, dass wenn ich die Kaskaden zu menu_bar, Wenn ich es Tue, wie unten, es macht alle Menüs deaktiviert... menu_bar.add_cascade(label=MDL[0], menu=selbst.nMenu[mc], Status=tk.DEAKTIVIERT)
  • Könnte ich die unter-wie auch... aber ich wollen, deaktivieren Sie das übergeordnete Menü zu kommen, nicht die Elemente eins nach dem anderen... selbst.nMenu[0].entrycget(0, 'label') selbst.nMenu[0].entryconfigure('Quit', state=tk.DEAKTIVIERT) selbst.nMenu[0].entryconfigure(0)
  • Haben Sie die Dokumentation zu Lesen, die auf den Menü-Befehl, um zu sehen, ob es einen Weg gibt, Sie zu deaktivieren Sie etwas? Was die Forschung haben Sie getan, oder was haben Sie versucht, dieses problem zu lösen?
  • Der einzige Ort, den ich erreichte, war, Wenn ich deaktivieren Sie die Menüs während der Schöpfung, auf die ich zugreifen kann der "Staat".. aber wenn ich versuche zu tun, also später, mit nMenu[0].config(state=tk.DISABLED) oder tk.NORMAL... bekomme ich eine Fehlermeldung _tkinter.TclError: unknown option "-state" ... ich versuche mehr zu Lesen von Dokumentationen, die ich habe.. aber Kein Glück... ich Schätze, wenn Sie die Idee für mich klar... ich hoffe, Sie verstehen, was ich tun soll...
InformationsquelleAutor mlwn | 2014-05-03
Schreibe einen Kommentar