Ящик сообщений Tkinter застрял в цикле

Ahmad Muhammad спросил: 13 июня 2018 в 07:46 в: python

Я только начал работать с графическим интерфейсом на Python, используя tkinter. Я создал программу, которая создавала бы случайные пароли ... ей все еще не хватает куча вещей, таких как сохранение паролей и просмотр сохраненных паролей. Таким образом, проблема заключается в том, что я добавил обработку ошибок, когда пользователь дал бы длину пароля, чтобы мы получали только целые числа, а не строки ... как только диалог ошибок всплывает, он не закрывается, если я не завершу его из pycharm.

def error(self):
    self.messagebox.showerror("Oops!","Invalid input Integers only!")
    l = int(len(entr1.get()))
    while True:
        try:
            entr1.update()
            lt = abs(int(entr1.get()))
            break
        except ValueError:
            entr1.delete(0,l)
            entr1.update()
            self.error()

Выше моей процедуры обработки ошибок, entr1 - это поле ввода, выше, это окно с сообщением об ошибке, которое будет отображаться. Пожалуйста, расскажите мне, как я могу это исправить ... спасибо заранее

1 ответ

Ahmad Muhammad ответил: 14 июня 2018 в 04:07

Исправлено: Используемая инструкция if вместо цикла True.

def error(self):
self.messagebox.showerror("Oops!","Invalid input Integers only!")def gen(self):
    try:
        entr1.update()
        lt = abs(int(entr1.get()))
        suc = 1
    except:
        entr1.delete(0, END)
        entr1.update()
        self.error()
        suc = 0
    if suc == 1:
        tex1.delete('1.0', END)
        tex1.update()
        for x in range(21):
            password = ""
            for i in range(lt):
                randa = self.random.choice(self.al)
                randn = str(self.random.randint(0,9))
                rand = [randa, randn]
                password += self.random.choice(rand)
            tex1.insert("1.0", "{}\n".format(password))

команда su short for success отслеживает обработку ошибок, и программа выполняется только в том случае, если suc = 1 , al - список, содержащий все алфавиты, tex1 - текстовое поле

Дополнительное видео по вопросу: Ящик сообщений Tkinter застрял в цикле

Библиотека Tkinter - 8 - Секундомер

Python & Tkinter - Поле ввода

Create GUI App with Python , Tkinter [1]