Python Tkinter - не знаете, как использовать функцию messagebox.askretrycancel () - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть функция, над которой я работаю, которая отображает различные цифры в зависимости от введенного ключевого слова, и решила использовать simpledialog.askstring () для отображения окна сообщения, в которое я могу ввести свое ключевое слово. Когда я неправильно ввожу ключевое слово, я хочу отобразить окно сообщения, которое спрашивает меня, хочу ли я повторить попытку и повторно ввести ключевое слово, но я не могу заставить это работать для меня.

Пока мой код:

from tkinter import Tk
from tkinter import simpledialog, messagebox

def display_figure():
    application_window = Tk()
    application_window.withdraw()

    answer = simpledialog.askstring("Input", "What figure do you want to look at: 'Fig1', 'Fig2', 'Fig3', or 'Fig4'?", parent=application_window)
    if   answer == 'Fig1': (Code to display Fig1)
    elif answer == 'Fig2': (Code to display Fig2)
    elif answer == 'Fig3': (Code to display Fig3)
    elif answer == 'Fig4': (Code to display Fig4)
    else: messagebox.askretrycancel("Question", "Error: Not a recognized keyword. Do you want to try again?")

Я не уверен, как вернуться к предыдущему вопросу, чтобы снова запросить ключевое слово, когда нажата кнопка «Повторить» в появившемся окне сообщения, поэтому любая оценка будет оценена.

1 Ответ

0 голосов
/ 01 сентября 2018

askretrycancel всегда возвращает логическое значение. При нажатии Retry возвращает True и False при нажатии отмены. Вам нужно будет использовать цикл while и не прерывать его, пока ответ не будет правильным или пока не нажата кнопка Cancel. Вот код:

from tkinter import Tk
from tkinter import simpledialog, messagebox

def display_figure():
    application_window = Tk()
    application_window.withdraw()
    while True:
        answer = simpledialog.askstring("Input", "What figure do you want to look at: 'Fig1', 'Fig2', 'Fig3', or 'Fig4'?", parent=application_window)
        if   answer == 'Fig1': print(answer);break
        elif answer == 'Fig2': print(answer);break
        elif answer == 'Fig3': print(answer);break
        elif answer == 'Fig4': print(answer);break
        else:
            if messagebox.askretrycancel("Question", "Error: Not a recognized keyword. Do you want to try again?") == False:
                break


display_figure()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...