1
我是新來的!我不時訪問過,但現在我想我會加入社區。Tkinter奇怪的屬性問題
背景信息:我的程序會隨機生成一個密碼,並且可以在sqlite3數據庫中爲用戶保存該密碼。用戶隨後可以在一個單獨的窗口中查看和重新調用密碼。
這裏是我的代碼,我使用的幀的登錄頁面,然後表頁:
class passwordViewer(tkinter.Tk):
def __init__(self, *args, **kwargs):
tkinter.Tk.__init__(self, *args, **kwargs)
container = tkinter.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (PVLoginPage, PVTable):
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.passwordDB = sqlite3.connect('PDB.db')
print("Database connected successfully.")
self.showFrame("PVLoginPage")
def getDB(self):
return self.passwordDB
這是我的控制器。它創建一個到DB文件的連接,然後有一個方法返回數據庫。我有其他一些方法,但它們並不重要。
這是我的登錄頁面:
class PVLoginPage(tkinter.Frame):
def userLogin(self, ID, password):
try:
passwordDB = self.controller.getDB()
passwordDBQuery = passwordDB.cursor()
print("Statement ran successfully.")
passwordDBQuery.execute('SELECT * FROM USERS WHERE USERNAME="%s" AND PASSWORD="%s"' % (ID, password))
if passwordDBQuery.fetchone() is not None:
print("Logged in successfully.")
self.controller.showFrame("PVTable")
else:
print("Authentication failed!")
except IOError:
print("Select statement could not execute!")
此執行就好了。它從控制器獲取數據庫對象,並且完美地工作。
然而,這(這是內另一幀類剛剛登錄一個下方):
def LoadTable(self):
try:
passwordDB = self.controller.getDB()
passwordDBQuery = passwordDB.cursor()
#SQL Query Here.
except IOError:
print("Query failed!")
引發此錯誤:
return self.passwordDB
File "C:\Users\Tom\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 2095, in __getattr__
return getattr(self.tk, attr)
AttributeError: '_tkinter.tkapp' object has no attribute 'passwordDB'
的PVTable類的構造運行可裝入(),當它初始化。
對不起,如果我在這裏過分張貼。我想簡明扼要,但不想缺乏細節或引起我想要達到的目標。
非常感謝提前!
完美的作品,非常感謝你! –