Tkinter AttributeError:对象没有属性'tk'

Pla*_*nom 10 python tkinter python-3.x

我看了一下,但我无法找到错误的答案.这是代码:

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()
Run Code Online (Sandbox Code Playgroud)

这是错误:

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'
Run Code Online (Sandbox Code Playgroud)

我对tkinter很新,这个错误令我难过.我非常感谢任何帮助,谢谢!

Kev*_*vin 15

你的Pageinit方法应该调用Frameinit.

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)
Run Code Online (Sandbox Code Playgroud)

  • @PlatypusVenom http://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods (2认同)
  • [`super`](https://docs.python.org/3/library/functions.html#super) 通常用于访问属于给定对象的父类的方法。这里,`super(Page, self)` 返回一个类似框架的`self` 代理,并在其上调用`__init__()` 调用`Frame.__init__()`。 (2认同)