Zwischen Frames wechseln

Fragen zu Tkinter.
Antworten
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

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! :)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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()
Reicht das? Oder geht es dir explizit um das Frame-Widget?
Barcellona
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
Barcellona
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()
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?
Und was muss ich ändern um zwischen den Frames hin und her schalten zu können per Button?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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?
Weil du create_frame2 ausführst und nicht die Funktion übergibst.
Das Leben ist wie ein Tennisball.
Barcellona
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?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Barcellona hat geschrieben:Aber der command-Teil des Buttons wird doch erst bei einem Klick auf den Button ausgeführt, oder nicht?
Nein. Das Ergebnis des Ausdrucks rechts vom "=" wird an "command" gebunden. Du möchtest lambda, oder noch besser: functools.partial, verwenden.
Das Leben ist wie ein Tennisball.
Barcellona
User
Beiträge: 74
Registriert: Dienstag 25. Mai 2010, 12:10

Danke für den Tipp mit lambda!
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()
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Zu dem Sternchen-Import: http://wiki.python-forum.de/Import
Antworten