Flet, python: не изменяется текст кнопки формы
Пишу в vsc по гайду по ролику из ютуба. Дошло дело до окна регистрации: делал все как и на ютубе, но, почему-то, когда ввожу данные логина и пароля, кнопка "Добавить" не измненяeтся на "Добавлено"
код:
import flet as ft
import sqlite3
def main(page: ft.Page):
page.title = "Регистрация"
page.theme_mode = "dark"
page.vertical_alignment = ft.MainAxisAlignment.CENTER
page.window_width = 350
page.window_height = 400
page.window_resizeble = False
def register(e):
db = sqlite3.connect('it.proger')
cur = db.cursor()
cur.execute(""""CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
login TEXT,
pass TEXT
)""")
cur.execute(f"INSERT INTO users VALUES(NULL,'{user_login.value}', '{user_pass.value}')")
db.commit()
db.close()
user_login.value = ''
user_pass.value = ''
btn_reg.text = 'Добавлено'
page.update()
def validate(e):
if all([user_login.value, user_pass.value]):
btn_reg.disabled = False
btn_auth.disabled = False
else:
btn_reg.disabled = True
btn_auth.disabled = True
page.update()
def auth_user(e):
db = sqlite3.connect('it.proger')
cur = db.cursor()
cur.execute(f"SELECT * FROM users WHERE login = '{user_login.value}' AND pass = '{user_pass.value}'")
print(cur.fetchone())
db.commit()
db.close()
user_login.value = ''
user_pass.value = ''
btn_auth.text = "Авторизовано"
page.update()
user_login = ft.TextField(label="Login", width=200, on_change=validate)
user_pass = ft.TextField(label="Password", password=True, width=200, on_change=validate)
btn_reg = ft.OutlinedButton(text="Добавить", width=200, on_click=register, disabled=True)
btn_auth = ft.OutlinedButton(text="Авторизовать", width=200, on_click=auth_user, disabled=True)
panel_register = ft.Row(
[
ft.Column(
[
ft.Text("Регистрация"),
user_login,
user_pass,
btn_reg
]
)
],
alignment=ft.MainAxisAlignment.CENTER
)
panel_auth = ft.Row(
[
ft.Column(
[
ft.Text("Авторизация"),
user_login,
user_pass,
btn_auth
]
)
],
alignment=ft.MainAxisAlignment.CENTER
)
page.add(panel_auth)
ft.app(target=main)
Ответы (1 шт):
Автор решения: Evgenii Evstafev
→ Ссылка
В данном коде
panel_registerне добавляется на страницу черезpage.add(иными словамиpanel_register- определена, но не используется совсем), поэтому при запуске вы видите страницуАвторизация, а не регистрации.Если вы замените
page.add(panel_auth)наpage.add(panel_register)будет ошибка в выполнении запроса на создание таблицы пользователей (во всяком случае - у меня была такая ошибка), исправляется путем изменения:
cur.execute(""""CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
login TEXT,
pass TEXT
)""")
на
cur.execute(
"""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
login TEXT,
pass TEXT
)
"""
)