Задать вопрос
cuprumvsargetium
@cuprumvsargetium
228

Почем функция срабатывает сразу же, а не после нажатия кнопки?

Когда запускаю код, lbl_no сразу же показывается, а не после нажатия кнопки

from tkinter import *
from tkinter import ttk
import sqlite3


#NONE____
class none_none:
	pass
#DATA_BASE_COMMAND
class DataBase_connect:

	def __init__(self):
		self.connection = sqlite3.connect('datd_base.sqlite')
		self.cursor = self.connection.cursor()

	def select(self, sql):
		return self.cursor.execute(sql)

	def one(self):
		return self.cursor.fetchone()

	def chall(self):
		return self.cursor.fetchall()

	def execute(self, sql):
		self.cursor.execute(sql)
		self.connection.commit()

	def close(self):
		self.connection.close()

db = DataBase_connect()
casement_root = none_none()


class register_main:

	def __init__(self):
		self.reg = Tk()
		self.reg.title('РЕГИСТРАИЯ|ВХОД')
		self.reg.geometry('300x180')
		
	def reg_mainloop(self):
		self.reg.mainloop()

	def entr(lg,pswd):
		print('Выполнил')
		lbl_no = Label()
		lbl_no.grid(row = 4, column = 1)
		db.select("SELECT login, pssd FROM user WHERE (login,pssd) = ('%s','%s');"%(lg,pswd))
		result = db.one()
		print(result)
		if result == None:
			lbl_no.configure(text = 'НЕ ВЕРНЫЙ ЛОГИН \nИЛИ ПАРОЛЬ!')
		else:
			lbl_no.configure(text = 'ВХОД ВЫПОЛНИН')

	def functional(self):
		#LABEL
		self.lbl_lg = Label(self.reg, text = 'LOGIN')
		self.lbl_pswd = Label(self.reg, text = 'PASSWORD')
		#ENTRY
		self.enter_lg = Entry(self.reg)
		self.enter_pswd = Entry(self.reg)
		pswd = self.enter_lg.get()
		lg = self.enter_pswd.get()
		#BUTTON
		self.btn_entr = Button(self.reg, text = 'LOGIN IN')
		self.btn_reg = Button(self.reg, text = 'LOGIN')#, #command = register)
		self.btn_entr.bind('<Button-1>', register_main.entr(lg , pswd))
		#LABEL
		self.lbl_lg.grid(row = 0)
		self.lbl_pswd.grid(row = 1)
		#ENTRY
		self.enter_lg.grid(row = 0, column = 1)
		self.enter_pswd.grid(row = 1, column = 1)	
		#BUTTON
		self.btn_entr.grid(row = 2, column = 1)
		self.btn_reg.grid(row = 3, column = 1)

		#__________________________________________

class main():

	def __init__(self):
		self.root = Tk()
		self.root.title('TelephoneBook v.2 | GraphickEdition')
		self.root.geometry('500x400')

	def main_loop(self):
		self.root.mainloop()

casement_reg = register_main()
casement_reg.functional()

casement_reg.reg_mainloop()
casement_root.mainloop()
db.close()
  • Вопрос задан
  • 555 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Потому что в метод bind нужно передавать ссылку на функцию, а не результат её вызова.
Ответ написан
Комментировать
Смотри, тебе надо использовать структуру:
self.название_кнопки= Button(self, text='blablabla', command = lambda: название_функции(...))

Вместо ... могут стоять переменные, которые нужны для функции.
Вот на твоём примере:
self.btn_entr = Button(self, text = 'LOGIN IN', command = lambda: register(self, login, password))

Тут self стоит в переменных функции, т.к. часто без него ничего не работает (я со своими друзьями около 30 минут решал ошибку из-за отсутствия self)

Надеюсь тебе поможет)

PS Извини, но я мог неправильную функцию вписать, надеюсь суть поймёшь, иначе пиши и я завтра скину пример рабочей программы(она совсем другая, но там можно посмотреть как присвоить кнопке комманду)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽