Seite 1 von 1
mit destroy zerstörtes widged wieder errichten
Verfasst: Donnerstag 16. Juli 2009, 16:08
von py-mule
Hi,
gibt es eine Möglichkeit, ein mit destroy zerstörtes widged wieder zu errichten?
Bsp.
Code: Alles auswählen
import Tkinter as tk
root = tk.Tk()
frame = tk.Frame(root,width = 20, height = 6)
frame.pack()
but1 = tk.Button(frame, text = 'but1', width = 20, height = 3)
but1.pack()
def zerstoere_but1():
but1.destroy()
but2 = tk.Button(frame, command = zerstoere_but1, text= 'del but1', width = 20, height = 3)
but2.pack()
def build_but1():
pass
but3 = tk.Button(frame, command = build_but1, text= 'build_but1', width = 20, height = 3)
but3.pack()
root.mainloop
Gruß
py-mule
Verfasst: Donnerstag 16. Juli 2009, 16:38
von busfahrer
Hallo
mit dem Geometry Manager Grid könnte man sowas machen.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf8 -*-
import Tkinter as tk
root = tk.Tk()
frame = tk.Frame(root,width = 20, height = 6)
frame.grid()
but1 = tk.Button(frame, text = 'but1', width = 20, height = 3)
but1.grid(row=0,column=0)
def zerstoere_but1():
but1.grid_forget()
but2 = tk.Button(frame, command = zerstoere_but1, text= 'del but1', width = 20, height = 3)
but2.grid(row=1,column=0)
def build_but1():
but1.grid(row=0,column=0)
but3 = tk.Button(frame, command = build_but1, text= 'build_but1', width = 20, height = 3)
but3.grid(row=2,column=0)
root.mainloop()
Vielleicht reicht dir das ja schon.Ich weiss nicht ob das auch mit dem
Geometry Manager Pack möglich ist.
Gruß...busfahrer
Verfasst: Donnerstag 16. Juli 2009, 17:02
von EyDu
Ich verstehe zwar nicht viel von Tkinter, aber es existiert auch die Funktion "pack_forget". Mit dem "after"- bzw. "before"-Parameter der "pack"-Funktion sollte sich dann wahrscheinlich der Rest lösen lassen.
Verfasst: Donnerstag 16. Juli 2009, 23:51
von wuf
Hallo py-mule
Beim Grid-Layout-Manger gibt es noch die grid_remove() Methode. Es wurde im folgenden Beitrag darüber diskutiert:
http://www.python-forum.de/topic-15149. ... rid+remove
Gruss wuf

Verfasst: Freitag 17. Juli 2009, 00:51
von wuf
Hallo py-mule
Hier noch eine kleine Übung mit der von EyDu erwähnten pack_forget()-Methode. Interessanterweise existiert beim Pack-Layout-Manager keine Methode pack_remove()!:
Code: Alles auswählen
import Tkinter as tk
def hide_show_switch():
if button.cget('text') == HIDE:
button.config(text=SHOW)
#~~ Pack-Daten des 'test_widget' sichern
test_widget.packing_data = test_widget.pack_info()
#~~ Das 'test_widget'-Objekt wird entfernt
test_widget.pack_forget()
else:
button.config(text=HIDE)
#~~ Restauriere das entfernte 'test_widget' wieder
test_widget.pack_configure(test_widget.packing_data)
app_win = tk.Tk()
app_win.config(bg='yellow')
HIDE = 'Hide-Widget'
SHOW = 'Show-Widget'
test_frame = tk.Frame(app_win, bg=app_win.cget('bg'))
test_frame.pack()
test_widget = tk.Canvas(test_frame, bg='steelblue', width=50, height=50,
highlightthickness=0)
test_widget.pack(pady=5)
button_frame = tk.Frame(app_win)
button_frame.pack()
button = tk.Button(text=HIDE, width=20, command=hide_show_switch,
highlightthickness=0)
button.pack()
#~~ Attribut 'packing_data' ans 'test_widget'-Objekt haengen um die Verwendung
# der 'global'-Anweisung zu umgehen
test_widget.packing_data = test_widget.pack_info()
app_win.mainloop()
Gruss wuf
