Как получить значение из виджета записи tkinter, чтобы его можно было проверить? - PullRequest
0 голосов
/ 15 апреля 2019

Я настраиваю страницу входа, которая связана с базой данных SQLite. То, что я пытаюсь сделать, это получить и проверить запись из записей UserNameBox и PasswordBox. Оттуда я хочу передать значения в подпрограмму, которая будет проверять из подключенной базы данных SQL (используя SQLite), чтобы увидеть, являются ли значения действительными. Проблема в том, что я не могу найти способ / учебник для получения значений, введенных в поле ввода.

Из того, что я уже знаю / узнал, вы должны использовать функцию .get для получения значений из виджета ввода, но я не знаю, как передать значения из виджетов в подпрограмму для проверки.

import tkinter as tk
import os
import sqlite3

LARGE_FONT = ("Courier", 20)
SMALL_FONT = ("Courier", 10)

class Frame(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        MainFrame = tk.Frame(self)
        MainFrame.pack(side="top", fill="both", expand =True)
        MainFrame.grid_rowconfigure(0, weight=1)
        MainFrame.grid_columnconfigure(0, weight=1)

        self.frames = {}

        for F in (LoginPageGUI, QuitGUI):
            frame = F(MainFrame, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(LoginPageGUI)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

def xD(StringToPrint):
    print(StringToPrint)

class LoginPageGUI(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        LoginPageTitle = tk.Label(self, text="Login Page", font=LARGE_FONT)
        LoginPageTitle.pack(padx=10, pady=10)

        UserNameTitle = tk.Label(self, text="UserName", font=SMALL_FONT)
        UserNameTitle.pack()
        UserNameBox = tk.Entry(self, bd=7, fg="Black")
        UserNameBox.pack()

        PasswordTitle = tk.Label(self, text="Password", font=SMALL_FONT)
        PasswordTitle.pack()
        PasswordBox = tk.Entry(self, bd=7, fg="Black")
        PasswordBox.pack()

        EnterButton = tk.Button(self, text="Enter", fg="black",
                               command=lambda: os.system('python Reaction_Testing_GUI_version_2.py'))
        EnterButton.pack()

        MakeNewAccountButton = tk.Button(self, text="Make a new account", fg="black",
                               command=lambda: controller.show_frame(NewAccountPage))
        MakeNewAccountButton.pack()

        QuitButton = tk.Button(self, text="Quit", fg="red",
                               command=lambda: controller.show_frame(QuitGUI))
        QuitButton.pack()


class NewAccountpage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        NewAccountTitle = tk.Label(self, text="Make a new Account", font=LARGE_FONT)
        NewAccountTitle.pack(padx=10, pady=10)

        UserNameTitle = tk.Label(self, text="UserName", font=SMALL_FONT)
        UserNameTitle.pack()
        UserName = UserNameTitle.get()
        UserNameBox = tk.Entry(self, bd=7, fg="Black")
        UserNameBox.pack()

        PasswordTitle = tk.Label(self, text="Password", font=SMALL_FONT)
        PasswordTitle.pack()
        PasswordBox = tk.Entry(self, bd=7, fg="Black")
        PasswordBox.pack()

        EnterButton = tk.Button(self, text="Enter", fg="black",
                                command=lambda: Create_New_Account())
        EnterButton.pack()

        MakeNewAccountButton = tk.Button(self, text="Make a new account", fg="black",
                                         command=lambda: controller.show_frame(NewAccountPage))
        MakeNewAccountButton.pack()

        QuitButton = tk.Button(self, text="Quit", fg="red",
                               command=lambda: controller.show_frame(QuitGUI))
        QuitButton.pack()

class QuitGUI(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        QuitTitle = tk.Label(self, text="Are You Sure You Want To Quit?", font=LARGE_FONT)
        QuitTitle.pack(pady=10, padx=10)

        YesButton = tk.Button(self, text="Yes", fg="black",
                                 command=lambda: xD("xD it works"))
        YesButton.pack()

        GoBackButton = tk.Button(self, text="Go back to main page", fg="black",
                                 command=lambda: controller.show_frame(LoginGUI))
        GoBackButton.pack()

def check_Username():
    with sqlite3.connect('Database_Version_1.db') as db:
        Cursor = db.cursor()
        for name in(UserNameBox):
            Cursor.execute("SELECT Username FROM User WHERE Username = ?"(UserNameBox))
            exist = Cursor.fetchall()
            if len(exist)==0:
                print("There is no component named %s"%name)
            else:
                print()

LoginGUI = Frame()
LoginGUI.mainloop()

Я хочу, чтобы я мог передавать значения из записей UserNameBox и PasswordBox, когда я нажимаю EnterButton, значения передаются в подпрограмму, где проверяются имя пользователя и пароль. Пожалуйста, помогите спасибо.

1 Ответ

1 голос
/ 15 апреля 2019

Более или менее.

Я использую self., чтобы иметь доступ к self.UserNameBox и self.PasswordBox в других методах в классе LoginPageGUI.

Я назначаю метод check_username кнопке.Этот метод получает значения из Entry s и запускает внешнюю функцию check_Username с параметрами username, password.

check_Username возвращает True или False, и я использую его для запуска внешней программы.

class LoginPageGUI(tk.Frame):

    def __init__(self, parent, controller):

        self.UserNameBox = tk.Entry(self)

        self.PasswordBox = tk.Entry(self)

        EnterButton = tk.Button(self, text="Enter", command=self.check_login)


    def check_login(self):
        user_name = self.UserNameBox.get()
        password = self.PasswordBox.get()

        if check_Username(user_name, password):            
            os.system('python Reaction_Testing_GUI_version_2.py')


def check_Username(username, password):                                
    with sqlite3.connect('Database_Version_1.db') as db:
        Cursor = db.cursor()
        Cursor.execute("SELECT Username FROM User WHERE Username = ?", (username,))
        exist = Cursor.fetchall()
        if len(exist) == 0:
            print("There is no component named %s" % user_name)
            return False
        else:
            # ... check password and return True or False ...
            return True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...