目前,我有一个程序要求用户输入用户名和密码,并将其与数据库进行比较,以检查它们是否对应。如果他们这样做,则接受用户,如果他们不接受,则会再次询问他们。但是,当运行此代码时,代码将输出错误:
' AttributeError: 'Login' object has no attribute 'pack''
我试图弄清楚为什么它在程序运行顺利时会向python shell输出错误?发生错误后,用户仍然可以输入用户名和密码,数据库检查工作正常,但错误打印在python shell中。
from tkinter import *
import tkinter.messagebox as tm
import sqlite3
class Login:
def __init__(self,master):
self.master = master
master.title = ("Please login.")
self.label_1 = Label(master, text="Username")
self.label_2 = Label(master, text="Password")
self.entry_1 = Entry(master)
self.entry_2 = Entry(master)
self.label_1.grid(row=0, sticky=E)
self.label_2.grid(row=1, sticky=E)
self.entry_1.grid(row=0, column=1)
self.entry_2.grid(row=1, column=1)
self.logbtn = Button(master, text="Login", command = self._login_btn_clickked)
self.logbtn.grid(columnspan=2)
self.pack()
def _login_btn_clickked(self):
print(self.entry_1.get())
print(self.entry_2.get())
username = (self.entry_1.get())
password = (self.entry_2.get())
GetDatabase(username,password)
答案 0 :(得分:0)
删除此行
self.pack()
您所谓的方法并不存在
编辑:
在代码中,未指定Login类从任何类继承。在这种情况下,有两种可能性。
Python2
如果未指定基类,则除了我们在类(more)中指定的自定义方法和属性外,该类几乎为空。
Python3
如果未指定基类,则默认情况下类继承自对象类(more)。
假设您使用的是python 3,则Login类的唯一基类是对象类。因此,要调用方法self.pack(),它应该在基类(对象类)或Login类中定义。但是该方法未在基类或Login类中定义。要查看对象类中定义的方法,可以使用here中的以下代码。
methodList = [method for method in dir(object) if callable(getattr(object, method))]
print(methodList)
['__class__', '__delattr__', '__format__', '__getattribute__', '__hash__','__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__','__setattr__', '__sizeof__', '__str__', '__subclasshook__']
但是可以从代码中推断出,您正在尝试调用master
对象的pack方法。您可能需要更改
self.pack()
到
self.master.pack()
答案 1 :(得分:0)
您必须删除该行
Interlocked.Increment
在Interlocked.Add
方法的末尾,或者您必须从已定义self.pack()
方法的类继承__init__
类。