Seite 1 von 1
Kann man Frames übereinander legen?
Verfasst: Sonntag 7. August 2011, 21:15
von Kiiba
Hey
Meine Frage wie oben schon beschrieben: Kann man Frames übereinander legen.
Ich habe vor diese einzelnt zu "zerstören" um in einen nächste Ebene zu gelangen.
Oder kann man ganz einfach durch klicken eines Buttons ein neues Python programm starten...
Was ich will sieht ungefäher so aus
Danke im vorraus..!
Code: Alles auswählen
#IMPS
import tkinter
#die enden
#DEF
def allesende():
main.destroy()
def mfdestroy():
mf1.destroy()
def wkframedes():
wkframe.destroy()
#Main
main = tkinter.Tk()
#------------------------------------------------------------------------------
#Willkommens-Frame
wkframe = tkinter.Frame(main)
wkframe.pack(fill="both")
#Logo
logolb = tkinter.Label(wkframe)
im1 = tkinter.PhotoImage(file="logo.gif")
logolb["image"] = im1
logolb.pack(side="right")
#willkommenende
wkende = tkinter.Button(wkframe, text = "Accept", command = wkframedes)
wkende.pack()
#text
text1 = tkinter.Label(wkframe, text = "Accept the AGB's :P.")
text1.pack(side="left")
#------------------------------------------------------------------------------
#main-Frame1
mf1 = tkinter.Frame(main)
mf1.pack(expand=1, fill="both")
#Ende Button 1MF
mfende = tkinter.Button(mf1, text = "Ende", command = mfdestroy)
mfende.pack(side="right")
#Text
text2 = tkinter.Label(mf1, text = "Hallo zu meinem Programm.")
text2.pack(side="left")
#------------------------------------------------------------------------------
#Programm Loop& Ende
#Ende
allesbeendenbuttonknopname = tkinter.Button(main, text = "Programm beenden",
command = allesende)
allesbeendenbuttonknopname.pack(side="bottom")
#Loop
main.mainloop()
Re: Kann man Frames übereinander legen?
Verfasst: Sonntag 7. August 2011, 23:12
von wuf
Hallo Kiiba
Willkommen in unserem Forum. Ja Frames können übereinander gelegt werden. Hier eine Test-Variantel zum herumexperimentieren:
Code: Alles auswählen
import Tkinter as tk
COLOR_LIST = ['yellow', 'green', 'blue', 'red', 'brown']
FRAME_WIDTH = 200
FRANE_HEIGHT = 200
FRAME_OFFSET = 20
XORG = 20
YORG = 20
def create_frame(index):
frame = tk.Frame(app_win, width=FRAME_WIDTH, height=FRANE_HEIGHT,
relief='raised', bd=1, bg=COLOR_LIST[index], cursor='hand1')
frame.propagate(0)
frame.place(x=XORG+index*FRAME_OFFSET, y=YORG+index*FRAME_OFFSET)
return frame
if __name__ == "__main__":
app_win = tk.Tk()
app_win.wm_geometry('400x400+20+20')
app_win.title("Frame-Widget Level")
frame_obj_list = [create_frame(index) for index in xrange(len(COLOR_LIST))]
frame_obj_list[-1].lower(None)
frame_obj_list[2].lower(frame_obj_list[1])
frame_obj_list[0].lift(None)
frame_obj_list[3].lift(frame_obj_list[0])
app_win.mainloop()
Gruß wuf

Re: Kann man Frames übereinander legen?
Verfasst: Montag 8. August 2011, 16:17
von Kiiba
wuf hat geschrieben:Hallo Kiiba
Willkommen in unserem Forum. Ja Frames können übereinander gelegt werden. Hier eine Test-Variantel zum herumexperimentieren:
Gruß wuf

Danke =) abaabababab hast du das auch für python 3.2 ... ? =o weil .. juaa und ich versteh nicht was das sein soll ich will praktisch einfach ein "interface" wo man ok drücken kann um weiter zu kommen und dann alles weg ist was da war und man dann was komplett anderes hat oder sich vorher "einloggen" muss um auf das nächste zuzugreifen können ...
Re: Kann man Frames übereinander legen?
Verfasst: Montag 8. August 2011, 17:20
von Xynon1
Warum arbeitest du dann nicht mit Toplevel-Widgets? Theoretisch kann man auch nur ein Toplevel nehmen und immer eine "{geometry manager}_forget()"-Methode benutzen und dann den neuen Frame auf das Toplevel packen. Wenn du aber einfach nur mehrere Fenster hintereinander öffnen möchtest z.B. wie bei einem Install-Dialog unter Windows, kannst du auch schlicht die einzelnen Fenster nacheinander erzeugen.
Ein einfaches Beispiel wie man das mit einem modalen Dialog machen könnte:
Code: Alles auswählen
#/usr/bin/env python3
from tkinter import simpledialog
import tkinter as tk
if __name__ == "__main__":
root = tk.Tk()
root.withdraw()
simpledialog.Dialog(root, "Hallo Welt 1")
simpledialog.Dialog(root, "Hallo Welt 2")
simpledialog.Dialog(root, "Hallo Welt 3")
simpledialog.Dialog(root, "Hallo Welt 4")
root.mainloop()
Re: Kann man Frames übereinander legen?
Verfasst: Montag 8. August 2011, 19:25
von wuf
Hallo Kiiba
Hier noch deine Variante mit überlappenden bzw. abdeckenden Frames. Sorry habe dein Skript völlig umgeschrieben um es lesbarer zu machen. Das mit den Frames funktioniert nur, wenn du den 'place'-Layoutmanager für deren Platzierung verwendest. Wird die Grösse des Hauptfensters geändert passen sich die Frames aber nicht automatisch dieser Änderung an. Wollte dich auch darauf aufmerksam machen an Stelle von Frames Toplevel-Fenster zu verwenden. Hierfür wirst du beim durchlesen des Beitrages von Xynon1 bestens informiert.
Code: Alles auswählen
try:
import Tkinter as tk
except ImportError:
import tkinter as tk
def all_close():
main.destroy()
def main_frame_close():
main_frame.destroy()
def close_welcome_frame():
wellcome_frame.destroy()
#---- Main-Window -------------------------------------------------------------#
XPOS = 10
YPOS = 10
WIDTH = 200
HEIGHT = 200
LABEL_TXT_1 = "Accept the AGB's :P."
LABEL_TXT_2 = "Hallo zu meinem Programm."
main = tk.Tk()
main.geometry("%dx%d+%d+%d" % (WIDTH, HEIGHT, XPOS, YPOS))
main.config(bg='khaki1')
all_close_but = tk.Button(main, text="Programm beenden", command=all_close)
all_close_but.pack(expand=True)
#---- Main-Frame --------------------------------------------------------------#
main_frame = tk.Frame(main, bg='khaki2')
main_frame.place(x=0, y=0, width=WIDTH, height=HEIGHT)
text2 = tk.Label(main_frame, text=LABEL_TXT_2, bg=main_frame['bg'])
text2.pack(expand=True)
main_frame_close_but = tk.Button(main_frame, text="Ende",
command=main_frame_close)
main_frame_close_but.pack(expand=True)
#---- Wellcome-Frame ----------------------------------------------------------#
wellcome_frame = tk.Frame(main, bg='khaki3')
wellcome_frame.place(x=0, y=0, width=WIDTH, height=HEIGHT)
logo = tk.PhotoImage(file="logo.gif")
logo_label = tk.Label(wellcome_frame, image=logo, bg=wellcome_frame['bg'])
logo_label.pack(expand=True)
text1 = tk.Label(wellcome_frame, text=LABEL_TXT_1, bg=wellcome_frame['bg'])
text1.pack(expand=True)
# Wellcom-Frame schliessen
wellcome_end_but = tk.Button(wellcome_frame, text="Accept",
command=close_welcome_frame)
wellcome_end_but.pack(expand=True)
main.mainloop()
Gruß wuf

Re: Kann man Frames übereinander legen?
Verfasst: Dienstag 9. August 2011, 02:17
von Kiiba
wuf hat geschrieben:Hallo
"wuf"

Dankee Euch
Xynon1 hat geschrieben:Warum arbeitest du dann nicht mit Toplevel-Widgets?
Weil ich nicht weiß wie

Ich hab mir nur so ein Buch durchgelesen da steht nur mit tkinter diese Sachen ..
http://www.galileocomputing.de/katalog/ ... telID-2640
Wie könnte man denn damit jetzt Frames auf die Dialoge bringen,für die Buttons und Texte..? Ist dann mein main=tk.Tk() einfach ein "Hallo Welt X" und ich kann einfach Sachen herauf schreiben...
Code: Alles auswählen
#/usr/bin/env python3
from tkinter import simpledialog
import tkinter as tk
if __name__ == "__main__":
root = tk.Tk()
root.withdraw()
simpledialog.Dialog(root, "Hallo Welt 1")
simpledialog.Dialog(root, "Hallo Welt 2")
simpledialog.Dialog(root, "Hallo Welt 3")
simpledialog.Dialog(root, "Hallo Welt 4")
root.mainloop()
[/quote]
wuf hat geschrieben:Sorry habe dein Skript völlig umgeschrieben um es lesbarer zu machen.

Ich finde ihn lesbar

whäääää

.:Danke das du ihn umgeschrieben hast:. wusste garnicht das man Variabelen so
wuf hat geschrieben:"%dx%d+%d+%d" % (WIDTH, HEIGHT, XPOS, YPOS)
dort einbringen kann :/
Re: Kann man Frames übereinander legen?
Verfasst: Dienstag 9. August 2011, 08:27
von wuf
Kiiba hat geschrieben:Wie könnte man denn damit jetzt Frames auf die Dialoge bringen,für die Buttons und Texte..? Ist dann mein main=tk.Tk() einfach ein "Hallo Welt X" und ich kann einfach Sachen herauf schreiben...
Du musst dein Buch leider nochmals durchlesen aber diesmal genauer und unbedingt alle Beispiele ausprobieren
Gruß wuf

Re: Kann man Frames übereinander legen?
Verfasst: Dienstag 9. August 2011, 16:46
von Kiiba
wuf hat geschrieben: diesmal genauer und unbedingt alle Beispiele ausprobieren
(sad face) xD das ist so megaaa dick (._.') okyy mach ich
Gruß zurück
Ps: instnant massanger
