パスワード入力用のエントリウィジェット、パスワード検証用のハンドラ関数、検証結果の表示用のラベルウィジェットを使用しようとしています。ボタンlogin_btn
がクリックされるたびにコードが、今、これまでに以下のようにパスワード検証のためのエントリウィジェットのTkinterイベントバインディング
class LoginFrame(Frame):
def __init__(self, parent):
#Frame.__init__(self, parent)
super(LoginFrame, self).__init__()
self.parent = parent
self.initUI()
# initialize the login screen UI
def initUI(self):
# Set up login frame properties
self.parent.title("Login Screen")
# creating instruction label
inst_lbl = self.make_label(self.parent, "Please login to continue")
# creating labels and entries for user name and password
user_name = self.make_entry(self.parent, caption="User Name:")
pwd = self.make_entry(self.parent, caption="User Password:", show="*")
# create a login button
login_btn = self.make_button(self.parent, self.verify_user, "Login")
# create a button
#----------------------------------------------------------------------
def make_button(self, parent, command, caption=NONE, side=TOP, width=0, **options):
"""make a button"""
btn = Button(parent, text=caption, command=command)
if side is not TOP:
btn.pack(side=side)
else:
btn.pack()
return btn
def make_label(self, parent, caption=NONE, side=TOP, **options):
label = Label(parent, text=caption, **options)
if side is not TOP:
label.pack(side=side)
else:
label.pack()
return label
def make_entry(self, parent, caption=NONE, side=TOP, width=0, **options):
#Label(parent, text=caption).pack(side=LEFT)
self.make_label(self.parent, caption, side)
entry = Entry(parent, **options)
if width:
entry.config(width=width)
if side is not TOP:
entry.pack(side=side)
else:
entry.pack()
return entry
# verify user name and password
#----------------------------------------------------------------------
def verify_user(event):
"""verify users"""
if user_name.get() == "admin" and pwd.get() == "123":
#inst_lbl.configure(text="User verified")
event.widget.config(text="User verified")
else:
#inst_lbl.configure(text="Access denied. Invalid username or password")
event.widget.config(text="Access denied. Invalid username or password")
def main():
top = Tk()
app = LoginFrame(top)
top.mainloop()
if __name__ == '__main__':
main()
私は方法verify_user
によって検証するuser_name
とpwd
を必要とする、結果はinst_lbl
に示されている(検証をトリガーします)。だからlogin_btn
クリックイベントに応じてinst_lbl
をverify_user
にバインドするにはどうすればよいですか? user_name
とpwd
の内容をverify_user
で確認するにはどうすればよいですか?
クラス 'LoginFrame'が継承するため、' Frame'は、どのように使用しますこの場合は '__init __()'に 'super()'を正しく入れていますか? – daiyue
'super()'でコードを実行しましたが、エラーは発生しませんでした。 – daiyue
ええ、Python 2のためにそのエラーが発生しました。申し訳ありませんが、私はそれを言及する必要があります。 Python 2では、このようにLoginFrameのパラメータにオブジェクトを追加する必要があります。 'クラスLoginFrame(フレーム、オブジェクト)'。 Python 3では、正常に動作するはずです。 – Lafexlos