Tkinter-Anwendung zum Wechseln zwischen verschiedenen Seitenrahmen
Voraussetzungen: Python GUI - tkinter
Manchmal kommt es vor, dass wir eine Anwendung mit mehreren Popup-Dialogfeldern erstellen müssen, z. B. Seitenrahmen. Hier ist ein schrittweiser Prozess, um mehrere Tkinter-Seitenrahmen zu erstellen und zu verknüpfen! Dies kann als Boilerplate für komplexere Python-GUI-Anwendungen wie das Erstellen von Schnittstellen für virtuelle Laboratorien für Experimente, Klassenzimmer usw. verwendet werden.
Hier sind die Schritte:
- Erstellen Sie drei verschiedene Seiten. Hier haben wir drei verschiedene Seiten: Die Startseite als Startseite, Seite eins und Seite zwei.
- Erstellen Sie einen Container für jeden Seitenrahmen.
- Wir haben vier Klassen. Das erste ist die tkinterApp-Klasse, in der wir die drei Frames initialisiert und eine Funktion show_frame definiert haben, die jedes Mal aufgerufen wird, wenn der Benutzer auf eine Schaltfläche klickt.
- Die Startseite ist einfach mit zwei Schaltflächen, um zu Seite 1 und Seite 2 zu gelangen.
- Seite 1 verfügt über zwei Schaltflächen, eine für Seite 2 und eine für die Rückkehr zur Startseite.
- Seite 2 verfügt außerdem über zwei Schaltflächen, eine für Seite 1 und andere, um zu StartPage zurückzukehren.
- Dies ist eine vereinfachte Anwendung zum Navigieren zwischen Tkinter-Frames.
- Dies kann als Boilerplate für komplexere Anwendungen verwendet werden, und es können verschiedene Funktionen hinzugefügt werden.
Die App startet mit der Startseite als erste Seite, wie in der Klasse tkinterApp gezeigt. Hier in StartApp gibt es zwei Schaltflächen. Durch Klicken auf eine Schaltfläche gelangen Sie zur jeweiligen Seite. Sie können diesen Seiten Bilder und Grafiken hinzufügen und komplexe Funktionen hinzufügen. Die Seiten haben auch zwei Schaltflächen. Bei jedem Drücken einer Taste wird show_frame aufgerufen, wodurch die jeweilige Seite angezeigt wird.
Unten ist die Implementierung.
import
tkinter as tk
from
tkinter
import
ttk
LARGEFONT
=
(
"Verdana"
,
35
)
class
tkinterApp(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
(StartPage, Page1, Page2):
frame
=
F(container,
self
)
self
.frames[F]
=
frame
frame.grid(row
=
0
, column
=
0
, sticky
=
"nsew"
)
self
.show_frame(StartPage)
def
show_frame(
self
, cont):
frame
=
self
.frames[cont]
frame.tkraise()
class
StartPage(tk.Frame):
def
__init__(
self
, parent, controller):
tk.Frame.__init__(
self
, parent)
label
=
ttk.Label(
self
, text
=
"Startpage"
, font
=
LARGEFONT)
label.grid(row
=
0
, column
=
4
, padx
=
10
, pady
=
10
)
button1
=
ttk.Button(
self
, text
=
"Page 1"
,
command
=
lambda
: controller.show_frame(Page1))
button1.grid(row
=
1
, column
=
1
, padx
=
10
, pady
=
10
)
button2
=
ttk.Button(
self
, text
=
"Page 2"
,
command
=
lambda
: controller.show_frame(Page2))
button2.grid(row
=
2
, column
=
1
, padx
=
10
, pady
=
10
)
class
Page1(tk.Frame):
def
__init__(
self
, parent, controller):
tk.Frame.__init__(
self
, parent)
label
=
ttk.Label(
self
, text
=
"Page 1"
, font
=
LARGEFONT)
label.grid(row
=
0
, column
=
4
, padx
=
10
, pady
=
10
)
button1
=
ttk.Button(
self
, text
=
"StartPage"
,
command
=
lambda
: controller.show_frame(StartPage))
button1.grid(row
=
1
, column
=
1
, padx
=
10
, pady
=
10
)
button2
=
ttk.Button(
self
, text
=
"Page 2"
,
command
=
lambda
: controller.show_frame(Page2))
button2.grid(row
=
2
, column
=
1
, padx
=
10
, pady
=
10
)
class
Page2(tk.Frame):
def
__init__(
self
, parent, controller):
tk.Frame.__init__(
self
, parent)
label
=
ttk.Label(
self
, text
=
"Page 2"
, font
=
LARGEFONT)
label.grid(row
=
0
, column
=
4
, padx
=
10
, pady
=
10
)
button1
=
ttk.Button(
self
, text
=
"Page 1"
,
command
=
lambda
: controller.show_frame(Page1))
button1.grid(row
=
1
, column
=
1
, padx
=
10
, pady
=
10
)
button2
=
ttk.Button(
self
, text
=
"Startpage"
,
command
=
lambda
: controller.show_frame(StartPage))
button2.grid(row
=
2
, column
=
1
, padx
=
10
, pady
=
10
)
app
=
tkinterApp()
app.mainloop()