Also wenn man eine eigene Klasse MyScreen von tk.Canvas ableitet, braucht man __del__() nicht. Denn da kann man nach wie vor destroy() nehmen. Wenn man das aber mit der eigenen Klasse genauso macht, wie mit der augenblicklichen Funktion create_canvas und das etwa MyScreen nennt, dann hat man:BlackJack hat geschrieben:@Alfons Mittelmeyer: Ich wüsste nicht wo man hier `__del__()` implementieren müsste, ausser man macht beim OOP-Entwurf komische Sachen die man in Python so nicht machen würde.
Code: Alles auswählen
# statt ========================
activeWindow ='Main'
create_canvas(root,activeWindow)
def do_loadActiveWindow(windowtype):
global activeWindow
if windowtype != activeWindow:
activeWindow = windowtype
screen.destroy()
create_canvas(root,windowtype)
# hat man dann ==============
activeWindow ='Main'
my_screen = MyScreen(root,activeWindow)
def do_loadActiveWindow(windowtype):
global activeWindow
global my_screen
if windowtype != activeWindow:
activeWindow = windowtype
my_screen = MyScreen(root,activeWindow)
Ach so, fällt mir ein was man noch verbessern könnte:
- bei der Funktion create_canvas C als returnwert machen statt jetzt in die globale Variable 'screen' zu schreiben, dann wäre es so:
Code: Alles auswählen
activeWindow ='Main'
my_screen = create_canvas(root,activeWindow)
def do_loadActiveWindow(windowtype):
global activeWindow
global my_screen
if windowtype != activeWindow:
activeWindow = windowtype
my_screen.destroy()
my_screen = create_canvas(root,activeWindow)
Wenn Du allerdings von außen auf etwas im Canvas zugreifen willt, etwa ein Update des Error Widows, dann musst Du doch eine Klasse machen, und das create_canvas in die __init__() schreiben, außerdem auch Dein Error Window und dann noch eine update Methode für das Errorwindow definieren. Aber dort bitte keine neuen Label anlegen, sondern nur Inhalte aktualisieren, und bei __del__() destroy auf den Canvas