web-dev-qa-db-ja.com

TkinterをPythonログイン画面と統合するにはどうすればよいですか?

ここではTkinterを使用してログイン画面を作成しています。現時点では、下部にある[ログインしたままにする]ボタンは冗長であり、そのまま残ります。私がしたいことはこのコードを使用することです:

from tkinter import *

root = Tk()

label_1 = Label(root, text="Username")
label_2 = Label(root, text="Password")

entry_1 = Entry(root)
entry_2 = Entry(root)

label_1.grid(row=0, sticky=E)
label_2.grid(row=1, sticky=E)
entry_1.grid(row=0, column=1)
entry_2.grid(row=1, column=1)

checkbox = Checkbutton(root, text="Keep me logged in")
checkbox.grid(columnspan=2)

と組み合わせて:

username = "john"
input("Username: ")
while not username:
    if username == "john":
        print("Welcome")
    else:
        print("User not found")


password = "password"
while not password:
    input("password: ")
    if password == "password":
        print("Logged in")
    else:
        print("Incorrect password")

しかし、ログインコードが機能せず、その上で、2つを相互に統合することから始める場所がわかりません。私はpythonの新機能であり、Tkinterの新機能ですが、この助けには必死です!

前もって感謝します!

7
TheHarpoon

私はあなたの例を拡張しました。ログインウィンドウを保持するクラスを作成しました。

from tkinter import *
import tkinter.messagebox as tm


class LoginFrame(Frame):
    def __init__(self, master):
        super().__init__(master)

        self.label_username = Label(self, text="Username")
        self.label_password = Label(self, text="Password")

        self.entry_username = Entry(self)
        self.entry_password = Entry(self, show="*")

        self.label_username.grid(row=0, sticky=E)
        self.label_password.grid(row=1, sticky=E)
        self.entry_username.grid(row=0, column=1)
        self.entry_password.grid(row=1, column=1)

        self.checkbox = Checkbutton(self, text="Keep me logged in")
        self.checkbox.grid(columnspan=2)

        self.logbtn = Button(self, text="Login", command=self._login_btn_clicked)
        self.logbtn.grid(columnspan=2)

        self.pack()

    def _login_btn_clicked(self):
        # print("Clicked")
        username = self.entry_username.get()
        password = self.entry_password.get()

        # print(username, password)

        if username == "john" and password == "password":
            tm.showinfo("Login info", "Welcome John")
        else:
            tm.showerror("Login error", "Incorrect username")


root = Tk()
lf = LoginFrame(root)
root.mainloop()

何が起こっているのかをすべての行に行き渡らなかったことをお詫びします。理解するのはあなたにお任せします。その良い運動。しかし、最も重要なのはcommand = self._login_btn_clicked。この機能は、ログインボタンをクリックすると実行されます。この関数では、ユーザー名とパスワードの値を取得し、それらが正しいかどうかを確認します。また、チェックボックスにコールバックを添付していません。しかし、それはすでに行われていることと似ています。

編集:コメントで要求されたとおりに編集されました。

Login Prompt

12
Marcin

おそらく「ログイン」ボタンが必要でしょう?これを行うと、ボタンのcommand引数を使用して、クリックされたときに実行する関数をバインドできます。ボタンが呼び出す関数では、正しいユーザー名とパスワードを確認できます。ただし、whileループは使用せず、ボタンを押すたびに一度だけチェックして、それに応じて応答してください。

0
fhdrsdg