Ich hänge gerade bei einem Script und hoffe, dass mir jemand einen Tip (also eigentlich sind es zwei Tips) geben kann.
Es geht dabei um ein Childwindow in Tkinter.
1) Childwindow öffnen, parent wartet:
Es ist kein Problem, das Childwindow zu öffnen. Nur wäre es "schöner", wenn das Parent in dieser Zeit nicht aktivierbar wäre. Daher: das Parent soll erst wieder den Focus erhalten können und aktiv sein, wenn das Child nicht mehr geöffnet ist.
2) Childwindow schließen:
Klar kann ich das Childwindow mit dem X schließen, aber ein "Exit"-Button wäre schon toll. Ich habe dazu child.destroy() verwendet, aber das scheint nicht zu funktionieren. Ich bekomme eine Fehlermeldung, dass die maximale Anzahl an Argumenten erreicht ist.

Es ist ja nicht so, dass das Programm ohne diese Funktionen nicht arbeiten würde, aber es wäre doch schöner. Zum Einen würde die Funktionalität verbessert, zum Anderen würde ich was lernen.
Hier ist mal der bisherige Source:
Code: Alles auswählen
#!/usr/bin/python
import Tkinter as t
import sys as s
class Window(object, t.Tk):
"""A simple Parent window with all the buttons
needed for the App"""
def __init__(self):
self.root = t.Tk()
self.label = t.Label(self.root,
pady=5,
text="Tealist").grid(row=1, column=1)
self.list = t.Listbox(self.root,
width=40,
height=13).grid(row=2, column=1, rowspan=4)
self.btn_start = t.Button(self.root,
width=8,
bg="green",
text="Start",
command=self.brew).grid(row=2, column=2, sticky=t.E)
self.btn_stop = t.Button(self.root,
width=8,
bg="red",
text="Stop",
command=self.stop).grid(row=3, column=2, sticky=t.E)
self.btn_config = t.Button(self.root,
width=8,
fg="white",
bg="blue",
text="Config",
command=self.cfg).grid(row=4, column=2, sticky=t.E)
self.btn_exit = t.Button(self.root,
width=8,
text="Exit",
command=self.leave).grid(row=5, column=2, sticky=t.E)
self.root.mainloop()
def brew(self):
"""this will be the timer function"""
pass
def stop(self):
"""Stop the timer"""
pass
def cfg(self):
"""Open the window with the config"""
config = ChildWin(self.root)
#config.ChildWin.wait_window() # found on the web, but doesn't work
def leave(self):
"""Wow, extit the app"""
s.exit(0)
class ChildWin(object, t.Tk):
"""Childwindow, showing the config"""
def __init__(self, parent):
self.root = t.Toplevel(parent)
self.btn_add = t.Button(self.root,
text="Add",
command=self.add).grid(row=1, column=1, sticky=t.W)
self.btn_delete = t.Button(self.root,
text="Delete",
command=self.delete).grid(row=1, column=2, sticky=t.W)
self.btn_closechild = t.Button(self.root,
text="Close",
command=self.close).grid(row=1, column=4, sticky=t.E)
self.lbl_name = t.Label(self.root,
text="Tea:").grid(row=2, column=1, sticky=t.E)
self.entry_tea = t.Entry(self.root,
width=30,
bg="white").grid(row=2, column=2, sticky=t.W)
self.lbl_time = t.Label(self.root,
text="Time:").grid(row=2, column=3, sticky=t.E)
self.entry_time= t.Entry(self.root,
width=10,
bg="white").grid(row=2, column=4, sticky=t.W)
self.tealist = t.Listbox(self.root,
bg="white").grid(row=3, column=1, columnspan=5, sticky=t.W+t.E+t.N+t.S)
self.root.mainloop()
def add(self):
pass
def delete(self):
pass
def close(self):
self.destroy() # found on the web, but doesn't work!
root = Window()