2014-11-06 3 views
0

У меня есть класс фрейма входа, который я добавляю в корневое окно. То, что я хочу сделать, - это обнаружить, когда нажата кнопка из фрейма входа (помечена в коде как: #Detect login с именем пользователя и паролем и кнопкой quit нажмите здесь). Целью этого является сохранение ui, отделенного от метода аутентификации. Как мне это сделать? Спасибо заранее.TTK обнаружить кнопку нажмите

код выглядит следующим образом:

class LoginFrame(ttk.Frame): 
    def __init__(self, parent): 

     login_frame = ttk.Frame(parent) 
     login_frame.pack(pady=70) 

     logo = ttk.Label(login_frame, text="Login") 
     logo.grid(row=0, column=0, columnspan=2, pady=10) 

     username = ttk.Entry(login_frame) 
     username.grid(row=20, column=0, columnspan=2, padx=10, pady=10, sticky="ew") 

     password = ttk.Entry(login_frame) 
     password.configure(show="#") 
     password.grid(row=30, column=0, columnspan=2, padx=10, pady=10, sticky="ew") 

     login_btn = ttk.Button(login_frame, text="Login", command=self.authenticate) 
     login_btn.grid(row=40, column=0, columnspan=1, padx=10, pady=10, sticky="ew") 

     quit_btn = ttk.Button(login_frame, text="Quit", command=self.quit_app) 
     quit_btn.grid(row=40, column=1, columnspan=1, padx=10, pady=10, sticky="ew") 

     error_lbl = ttk.Label(login_frame, justify="center", foreground="#FF0000") 
     error_lbl.grid(row=50, column=0, columnspan=2, padx=10, pady=10, sticky="ew") 

     username.focus_set() 

    def authenticate(self): 
     #return login button is clicked with username and password 
     pass 

    def quit_app(self): 
     #return quit button is clicked 
     pass 

root = Tk() 
root.config(background="light grey") 
root.resizable(width=False, height=False) 
root.geometry("800x500") 
lf = LoginFrame(root) 

#Detect login with username and password and quit button click here 

root.mainloop() 
+0

Есть ли причина, по которой вы не вызываете конструктор родительского класса в 'LoginFrame'? (например: 'ttk.Frame .__ init __ (self, parent)') –

+0

Вы правы. он должен вызывать конструктор родительского класса. –

ответ

2

То, что вы просите, не имеет смысла. Не должно быть никакого кода между lf = ... и root.mainloop(). Работа wqy GUI заключается в том, что вы создаете виджеты и связываете с ними команды, а затем tkinter вызывается командами при щелчке по виджетам.

Если вы хотите, чтобы что-то произошло после того, как пользователь нажмет кнопку входа в систему, связать с ней команду и поместите любой код, который вы хотите выполнить в этой команде.

3

Вам это нужно, чтобы команда называется обратным вызовом.

login_btn = ttk.Button(login_frame, text="Login") 
login_btn.grid(row=40, column=0, columnspan=1, padx=10, pady=10, sticky="ew", command=authenticate) 

уведомление новая часть command=authenticate

команда может быть установлен на любой метод

http://effbot.org/zone/tkinter-callbacks.htm

Я дам вам понять кнопку бросить курить, я не хочу делать все, это помогает сделать сами.

+0

Я добавил команду (я забыл добавить ее раньше). Я знаю, как добавить команду обратного вызова. Мне нужно определить щелчок кнопки после lf = LoginFrame (root) –

+0

Это не позволит вам нажимать кнопку, пока вы не назовете lf = LoginFrame (root), кадр не будет настроен до этого времени. – KodyVanRy

+0

Можете ли вы предложить любую альтернативу? –

Смежные вопросы