Hallo,
ich programmiere erst seit heute mit GUI also nicht wundern, wennich noch nicht allzuviel Ahnung habe
Zu meiner Frage:
Ich habe einen Button und beim draufklicken soll ein Frame angezeigt werden.. Klappt soweit auch gut. Jetzt habe ich aber einen zweiten Button, welcher dafür sorgen soll, dass der Frame wieder ausgeblendet wird. Ich hab es zunächst mit der Methode destroy() versucht, das Problem hierbei ist, dass die Widgets dabei komplett zerstört werden und ich bei einem erneutem Klicken des "Anzeigen" Buttons eine Fehlermeldung bekomme (logischweise)
Gibt es einen Parameter für die Frame-Klasse mitder ich die "visibility" einstellen kann oder wie würde man am besten vorgehen?
Danke für eure Hilfe bereits im Voraus
Tobias Hartwich
Frame einblenden und ausblenden
Hallo,
probier das mal:
...funktioniert mit destroy(). Wenn es überhaupt das ist was Du wolltest...
probier das mal:
Code: Alles auswählen
from Tkinter import *
root = Tk()
def popup():
pop=Tk()
lab=Label(pop,text="POPUP!").grid()
close=Button(pop,text="close",command=lambda: pop.destroy()).grid()
but = Button(root,text="popup",command=lambda: popup())
but.grid()
root.mainloop()
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Also mir fällt da forget() ein:
Das Problem ist nur folgendes: Wenn das Frame anfangs oberhalb der Buttons sitzt, ist es nach forget und pack unterhalb . Es gibt noch die Möglichkeit mit info = f.info() die pack-Parameter zu holen, und dann mit f.pack(info) neu zu packen, aber das ändert irgendwie nichts, hmmm... Das ganze geht auch mit grid, spiel mal damit herum
Gruß, mawe
Also mir fällt da forget() ein:
Code: Alles auswählen
from Tkinter import *
root = Tk()
f = Frame()
Button(text="Hide",command=f.forget).pack()
Button(text="Show",command=f.pack).pack()
f.pack()
Label(f, text="Hello").pack()
Label(f, text="Hello2").pack()
root.mainloop()
Gruß, mawe
Vergiss meinen ersten post....
das hier geht evtl. eher in richtung das was du suchst:
ich bin mit den Namensräumen nicht besonders fit (eigentlich garnicht), deshalb die global anweisung. Das geht bestimmt auch eleganter...
das hier geht evtl. eher in richtung das was du suchst:
Code: Alles auswählen
from Tkinter import *
root = Tk()
mark=0
lab=0
def popup():
global mark, lab
if mark==0:
lab=Label(root,text="POPUP!")
lab.grid()
mark=1
else:
lab.destroy()
mark=0
but = Button(root,text="popup",command=lambda: popup())
but.grid()
root.mainloop()
Zuletzt geändert von knekke am Montag 7. März 2005, 17:09, insgesamt 1-mal geändert.
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Mit grid gehts ungefähr so:
Gruß, mawe
Mit grid gehts ungefähr so:
Code: Alles auswählen
from Tkinter import *
class GUI:
def __init__(self):
root = Tk()
self.info = {}
Button(text="Hide",command=self.forget_it).grid(row=2,column=0)
Button(text="Show",command=self.pack_it).grid(row=3,column=0)
self.f = Frame()
self.f.grid(row=1,column=0)
Label(self.f, text="Hello").pack()
Label(self.f, text="Hello2").pack()
root.mainloop()
def forget_it(self):
self.info = self.f.grid_info()
self.f.grid_forget()
def pack_it(self):
self.f.grid(self.info)
GUI()