ich bin recht neu in Python und in Tkinter und ich versuche gerade ein kleines Programm mit gui zu entwickeln. Ich versuche gerade, dass man zwischen den verschiedenen Fenstern hin und her wechseln kann. Mit Hilfe von Buttons funktioniert das ganze schon. Wenn ich das ganze allerdings auf mein Menu anwenden möchte erhalte ich einen Error. ( Manager -> Bildschirmeinstellungen) Die genaue Fehlermeldung lautet:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Jona\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
File "C:\Users\Jona\other\Desktop\testtestest123.py", line 60, in <lambda>
command=lambda: show_frame(Benutzereinstellungen,cont))
NameError: name 'cont' is not defined
Mein Code:
Code: Alles auswählen
import tkinter as tk
from tkinter import *
from tkinter import ttk
LARGE_FONT= ("Verdana", 12)
def close():
exit()
class SeaofBTCapp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (RemoteManager, Benutzereinstellungen, PageTwo):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(RemoteManager)
#Menu ohne Funktion
def show_frame(lable,cont):
frame= self.frames[cont]
frame.tkraise()
menubar = tk.Menu(container)
filemenu = tk.Menu(menubar, tearoff=0)
hilfemenu = tk.Menu (menubar, tearoff=0)
filemenu.add_command(label="Komplettes Setup")
filemenu.add_separator()
filemenu.add_command(label="Benutzereinstellungen",
command=lambda: show_frame(Benutzereinstellungen,cont))
filemenu.add_command(label="Bildschirmeinstellungen")
filemenu.add_command(label="Servereinstellungen")
filemenu.add_separator()
filemenu.add_command(label="Beenden", command=close)
menubar.add_cascade(label="Manager", menu=filemenu)
menubar.add_cascade(label="Hilfe", menu=hilfemenu)
hilfemenu.add_command(label="Info")
tk.Tk.config(self, menu=menubar)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
#Buttons mit Funktion
class RemoteManager(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
label = tk.Label(self, text="Willkommen im Remote Manager")
label.pack(pady=15,padx=25)
Benutzeranlegen_button = Button(self, text="Benutzereinstellungen", height= 0, width= 18,
command=lambda: controller.show_frame(Benutzereinstellungen))
Benutzeranlegen_button.pack()
label1 = tk.Label(self, text="")
label1.pack(pady=1,padx=25)
Bildschirmeinstellungen_button = Button(self, text="Bildschirmeinstellungen", height= 0, width= 18,
command=lambda: controller.show_frame(PageOne))
Bildschirmeinstellungen_button.pack()
label2 = tk.Label(self, text="")
label2.pack(pady=1,padx=25)
Servereinstellungen_button = Button(self, text="Servereinstellungen", height= 0, width= 18,
command=lambda: controller.show_frame(PageOne))
Servereinstellungen_button.pack()
label2 = tk.Label(self, text="")
label2.pack(pady=5,padx=25)
class Benutzereinstellungen(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Page One!!!", font=LARGE_FONT)
label.pack (pady=20,padx=10)
button1 = tk.Button(self, text="Back to Home",
command=lambda: controller.show_frame(StartPage))
button1.pack()
button2 = tk.Button(self, text="Page Two",
command=lambda: controller.show_frame(PageTwo))
button2.pack()
class PageTwo(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Page Two!!!", font=LARGE_FONT)
label.pack(pady=10,padx=10)
button1 = tk.Button(self, text="Back to Home",
command=lambda: controller.show_frame(StartPage))
button1.pack()
button2 = tk.Button(self, text="Page One",
command=lambda: controller.show_frame(PageOne))
button2.pack()
app = SeaofBTCapp()
app.mainloop()