python - Python Tkinter - 不确定如何使用 messagebox.askretrycancel() 函数
问题描述
我有一个我正在研究的函数,它根据输入的关键字显示不同的数字,并决定使用 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?")
当单击生成的消息框中的“重试”按钮时,我不确定如何循环回到上一个问题以再次询问关键字,因此我们将不胜感激。
解决方案
askretrycancel
总是返回布尔值。按下时重试返回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()
推荐阅读
- css - 为什么背景会影响此关键帧动画中的边框半径?
- ansible - 我正在尝试使用 ansible 查找 vm guest 的数据存储
- javascript - 如何在 JavaScript 中创建换行符?
- angular - 如何使用茉莉弹珠测试 Observable 订阅中的代码
- azure - 如果组织所有者只是链接的 Azure AD 的来宾而不是域成员,如何添加 Azure DevOps 组织用户?
- c# - (C#)Azure 函数 - 具有存储帐户绑定时禁用 Nagle 算法
- ruby-on-rails - Heroku 上的 Rails、Sidekiq、Redis - 出了点问题
- comparison - Talend 中当前行、上一行和下一行的比较
- ssh - Flask-migrate 通过 SSH 隧道连接到 MySQL 服务器时访问被拒绝
- angular - Angular 7 mat-datepicker 返回时刻但需要日期