Thomas Grops via Python-list wrote: > Peter, in your code what does that self.root = root mean in the __init__ > function of the class
In your original script you used global variables to access the tkinter.Tk() object and the canvas. A simplified example: import tkinter class Tank: def make_button(self): tkinter.Button(root).pack() root = tkinter.Tk() # you used the name "main" instead of "root" tank = Tank() tank.make_button() root.mainloop() Programmers with a little experience tend to avoid globals, so let's put the script code above into a function: import tkinter class Tank: def make_button(self): tkinter.Button(root).pack() def main(): root = tkinter.Tk() # you used the name "main" instead of "root" tank = Tank() tank.make_button() root.mainloop() main() When you run the above you'll get a NameError. Because make_button() accesses root which is no longer global you have to find a way to pass it to the tank instance. One way is to change the make_button() method and pass it along as an argument: class Tank: def make_button(self, root): tkinter.Button(root).pack() def main(): root = tkinter.Tk() tank = Tank() tank.make_button(root) root.mainloop() The other way (the one I used) is to make it an attribute of the tank instance: class Tank: def __init__(self, root): self.root = root def make_button(self): tkinter.Button(self.root).pack() def main(): root = tkinter.Tk() tank = Tank(root) tank.make_button() root.mainloop() Now you can access root as self.root in every method of the Tank class. There is no advantage in this case, but when root is referred in more than one place, either in the class or by the code invoking methods of the class, it will be more convenient. An important advantage of using an explicit argument instead of a global is that different instances can have different values for root. For a Tank that might be battlefields def main(): root = tkinter.Tk() other = tkinter.Toplevel() for battlefield in root, other: tank = Tank(battlefield) tank.make_button() root.mainloop() Note that this requires no change of the Tank class. -- https://mail.python.org/mailman/listinfo/python-list