Hallo zusammen,
ich arbeite mich gerade durch ein Tutorial für Tkinter und habe bisher eine Sache noch nicht verstanden.
Und zwar, wie wird in Tkinter zwischen den darzustellenden Frames durchgewechselt?
Sprich, ich erstelle ein Frame mit 2 Buttons als Startbildschirm dar und möchte dann, dass bei Klick auf einen Button
ein anderer Frame dargestellt wird im Fenster.
Hat jemand vielleicht ein kleines Beispiel, wie das funktioniert?
Danke schon einmal!
Zwischen Frames wechseln
Code: Alles auswählen
import Tkinter as tk
root = tk.Tk()
tk.Button(text="Klick mich", command=lambda :tk.Label(text="Neues Label").pack()).pack()
root.mainloop()
-
- User
- Beiträge: 74
- Registriert: Dienstag 25. Mai 2010, 12:10
Danke!
Meine Idee war aber eher, das ganze dargestellte Fenster zu wechseln.
Sprich' einen großen Frame, in dem sich alles von Seite 1 befindet und bei Klicken des Buttons
soll eine komplett andere Seite kommen.
Bsp: Seite 1=Hauptmenü, Seite2=Unterfenster
Meine Idee war aber eher, das ganze dargestellte Fenster zu wechseln.
Sprich' einen großen Frame, in dem sich alles von Seite 1 befindet und bei Klicken des Buttons
soll eine komplett andere Seite kommen.
Bsp: Seite 1=Hauptmenü, Seite2=Unterfenster
-
- User
- Beiträge: 74
- Registriert: Dienstag 25. Mai 2010, 12:10
Code: Alles auswählen
from Tkinter import *
class App:
def __init__(self, master):
frame = Frame(master) # is a container
frame.pack() #make visible
# instance variable # foregroung # when clicked
self.button = Button(frame, text="QUIT", fg="red", command=frame.quit)
self.button.pack(side=LEFT) # as far as left as possible
self.hi_there = Button(frame, text="Hello", command=self.create_frame2(master))
self.hi_there.pack(side=LEFT)
def say_hi(self):
print "hi there, everyone!"
def create_frame2(self,master):
frame2=Frame(master)
frame2.pack()
self.hi_there = Button(frame2, text="Hi", command=self.say_hi)
self.hi_there.pack(side=LEFT)
root = Tk()
app = App(root)
root.mainloop()
Weiß jemand wieso?
Und was muss ich ändern um zwischen den Frames hin und her schalten zu können per Button?
Weil du create_frame2 ausführst und nicht die Funktion übergibst.Barcellona hat geschrieben:So in der Art... allerdings wird der "Hi"-Button aus dem 2. Frame schon dargestellt bevor der "Hallo"-Knopf im 1. Button gedrückt wurde
Weiß jemand wieso?
Das Leben ist wie ein Tennisball.
-
- User
- Beiträge: 74
- Registriert: Dienstag 25. Mai 2010, 12:10
Aber der command-Teil des Buttons wird doch erst bei einem Klick auf den Button ausgeführt, oder nicht?
Wie übergebe ich denn dort richtig die Funktion?
Wie übergebe ich denn dort richtig die Funktion?
Nein. Das Ergebnis des Ausdrucks rechts vom "=" wird an "command" gebunden. Du möchtest lambda, oder noch besser: functools.partial, verwenden.Barcellona hat geschrieben:Aber der command-Teil des Buttons wird doch erst bei einem Klick auf den Button ausgeführt, oder nicht?
Das Leben ist wie ein Tennisball.
-
- User
- Beiträge: 74
- Registriert: Dienstag 25. Mai 2010, 12:10
Danke für den Tipp mit lambda!
Läuft jetzt...
Läuft jetzt...
Code: Alles auswählen
from Tkinter import *
class App:
def __init__(self, master):
self.frame = Frame(master) # is a container
self.frame.pack() #make visible
# instance variable # foregroung # when clicked
self.button = Button(self.frame, text="QUIT", fg="red", command=self.frame.quit)
self.button.pack(side=LEFT) # as far as left as possible
self.hi_there = Button(self.frame, text="Hello", command=lambda:self.create_frame2(master))
self.hi_there.pack(side=LEFT)
def say_hi(self):
print "hi there, everyone!"
def create_frame2(self,master):
self.frame.pack_forget()
frame2=Frame(master)
frame2.pack()
self.hi_there = Button(frame2, text="Hi", command=self.say_hi)
self.hi_there.pack(side=LEFT)
root = Tk()
app = App(root)
root.mainloop()
Zu dem Sternchen-Import: http://wiki.python-forum.de/Import