2016-08-29 7 views
1

мне нужна помощь форму всем вам, так что я что-то вроде этогоВызов функции __init__ из другой функции

class LoginFrame(Frame): 

    def __init__(self, master): 
     super().__init__(master) 
     ... 
     ... 
     ... 
    def _login_btn_clickked(self): 

     ... 
     ... 
     result = messagebox.askyesno("Wrong username or password.", "Do you want to try again?") 
     if result == True: 
      self.__init__(self) 

Таким образом, если пользователь выбирает опцию попробовать еще раз мне нужно снова начать всю программу, и отобразите окно входа в систему. Но когда я выполняю программу, процесс терпит неудачу.

+0

Что вы подразумеваете под провалом? Какая ошибка? –

+0

Ну на самом деле не терпит неудачу. После того, как пользователь нажмет «Да», повторите попытку. Программы ничего не делают, просто повесили трубку. –

ответ

0

Но когда я выполняю программу, процесс терпит неудачу.

На самом деле это должно быть. __init__ метод обычно вызывается после создания экземпляра. Вам нужно переделать это либо воссоздать экземпляр (первый звонок pack_forget на этом кадре, а затем сделать новый и упаковать на этом месте), или сделать это с помощью методов, как show_loginbox и т.д.

Обычно loginboxes производятся с использованием Toplevel с Entry как поля и некоторые кнопки, чтобы отправить результат. Если все сделано так, в случае ошибки можно просто удалить логин или/и пароли входа в окно и показать сообщение об ошибке Что я имею в виду:

first next

эталонную реализацию выше here

0

Ты используя tkinter.Frame?

Я должен подумать, что он не хотел бы быть реконструированным с использованием super(). init() Хотя он уже упакован в корневое окно (я имею в виду, что у вас есть настройка).

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