ここは新しいです!私は時々訪ねましたが、今私はコミュニティに参加すると思っていました。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ファイルへの接続を作成し、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!")
これがうまく実行されます。それはコントローラからDBオブジェクトを取得し、それは完全に動作します。 (ちょうどログイン1の下に別のフレーム・クラス内にある)が
これを:
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クラスのコンストラクタはLoadTableを(実行)を:
def LoadTable(self):
try:
passwordDB = self.controller.getDB()
passwordDBQuery = passwordDB.cursor()
#SQL Query Here.
except IOError:
print("Query failed!")
このエラーをスロー初期化する。
申し訳ありませんが、私はここでオーバー投稿しました。私は簡潔にしたいと思っていましたが、達成しようとしていることについて詳細が不足したり、混乱を招きたくなかった。
事前に感謝します。
完璧に動作します、ありがとうございます! –