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)
odertk.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...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie aktivieren oder deaktivieren Sie ein ganzes Menü durch aktivieren oder deaktivieren das Element, dem es verbunden ist.
Hier ist ein erfundenes Beispiel. Verwenden Sie die
Test1
Menü zum aktivieren oder deaktivieren derTest2
Menü.verwenden könnte unten auch... aber ich wollen, deaktivieren Sie das übergeordnete Menü zu kommen, nicht die Elemente eins nach dem anderen...