21

I've looked around a bit, but I can't find an answer to my error. Here is the code:

import tkinter as tk

root=tk.Tk()

class Page(tk.Frame):
    '''Enables switching between pages of a window.'''
    def __init__(self):
        self.widgets={}
        self.grid(column=0,row=0)

page=Page()

tk.mainloop()

Here is the error:

Traceback (most recent call last):  
  File "C:\Documents and Settings\Desktop\Python Scripts\Tkinter.py", line 11, in <module>  
    page=Page()  
  File "C:\Documents and Settings\Desktop\Python Scripts\Tkinter.py", line , in __init__  
    self.grid(column=0,row=0)  
  File "C:\Python34\lib\tkinter\__init__.py", line 2055, in grid_configure  
    self.tk.call(  
AttributeError: 'Page' object has no attribute 'tk'

I'm fairly new to tkinter, and this error has me stumped. I'd really appreciate any help, thank you!

PlatypusVenom
  • 547
  • 2
  • 6
  • 12

1 Answers1

28

Your Page init method should call Frame's init.

class Page(tk.Frame):
    '''Enables switching between pages of a window.'''
    def __init__(self):
        super(Page, self).__init__()
        self.widgets={}
        self.grid(column=0,row=0)
Kevin
  • 74,910
  • 12
  • 133
  • 166
  • 1
    Thanks a lot, but what exactly is `super` for in general use? – PlatypusVenom Jan 14 '15 at 15:12
  • 2
    @PlatypusVenom http://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods – NDevox Jan 14 '15 at 15:14
  • 4
    [`super`](https://docs.python.org/3/library/functions.html#super) is generally used to access methods that belong to the parent class of the given object. Here, `super(Page, self)` returns a Frame-like proxy of `self`, and calling `__init__()` on it invokes `Frame.__init__()`. – Kevin Jan 14 '15 at 15:15