不明白为什么我在类定义中出现NameError

时间:2019-07-22 22:56:40

标签: python python-3.x tkinter nameerror

我正在用Tkinter制作一个简单的产品库存应用,然后在第10行上得到NameError,如回溯所示。

from tkinter import ttk
from tkinter import *
import sqlite3

class Product:
    def __init__(self, window):
        self.wind = window
        self.wind.title("Products inventory")

    frame = LabelFrame(self.wind, text  = 'Register a new product')
    frame.grid(row = 0, column = 0, columnspan = 3, pady = 20)

    Label(frame, text = 'Name: ').grid(row = 1, column = 0)
    self.name = Entry(frame)
    self.name.grid(row = 1, column = 1)

if __name__ == '__main__':
    window = Tk()
    aplication = Product(window)
    window.mainloop()

显示的错误是:

Traceback (most recent call last):
  File "C:\Users\Joaquin\Desktop\Python apps\Products\main.py", line 5, in <module>
    class Product:
  File "C:\Users\Joaquin\Desktop\Python apps\Products\main.py", line 10, in Product
    frame = LabelFrame(self.wind, text  = 'Register a new product')
NameError: name 'self' is not defined

1 个答案:

答案 0 :(得分:1)

这是一个缩进问题,您的代码的一部分直接位于类主体中,而不是__init__主体中:

from tkinter import ttk
from tkinter import *
import sqlite3

class Product:
    def __init__(self, window):
        self.wind = window
        self.wind.title("Products inventory")

        frame = LabelFrame(self.wind, text  = 'Register a new product')
        frame.grid(row = 0, column = 0, columnspan = 3, pady = 20)

        Label(frame, text = 'Name: ').grid(row = 1, column = 0)
        self.name = Entry(frame)
        self.name.grid(row = 1, column = 1)

window = Tk()
aplication = Product(window)
window.mainloop()