Python, в то время как цикл конфликтует с другими кнопками в simpledialog

#python #while-loop #simpledialog

Вопрос:

Я новичок в программировании и пытаюсь сделать программу более типичной, но цикл while конфликтует с другими кнопками в simpledialog(включая кнопку закрытия), что делает невозможным выйти на полпути, не закончив основную.

 import tkinter
from tkinter import simpledialog
from tkinter import messagebox
from datetime import datetime
import time
start = time.time()
answer = "She sells seashells on the seashore"
rounds = 1    
messagebox.showinfo("TypeRacer","Test your typing speed by typing various texts as fast as possible.")
while rounds != 3:
    question = simpledialog.askstring("Round " str(rounds),answer)
    if question != answer:
        messagebox.showerror("Error!","Incorrect syntax")
    elif question == answer:
        messagebox.showinfo("You got it right!","Proceeding to the next round.")
        rounds  = 1
end = time.time()
f1 = end - start
f2 = int(f1)
f2 = datetime.fromtimestamp(f2)
f3 = f2.strftime("%M:%S")
messagebox._show("Well done!","Your time was: " str(f3))
 

Комментарии:

1. Подумайте, действительно ли вы хотите, чтобы интерфейс работал таким образом для теста набора текста. Делая это таким образом, пользователь будет считать время, которое он тратит на закрытие диалоговых окон, позиционирование точки вставки в новом диалоговом окне и т. Д.

2. В любом случае, мне не совсем ясно, что вы подразумеваете под «вмешательством» или «выходом» здесь; но вам следует изучить концепцию модального диалогового окна в документации.

3. Я не понимаю, что вы пытаетесь сделать и в чем проблема (я не запускал код), но обычно любой цикл является неправильной идеей в любом графическом интерфейсе (не только в tktiner ), потому что он блокирует mainloop() обработку всех событий и виджетов. возможно, вам следует использовать одно окно standrad и отображать сообщение во Label внутреннем окне.

4. Спасибо вам за комментарии. Так будет ли лучше, если я буду создавать свои собственные диалоги? Я попытался найти его и думаю, что создание моего собственного диалога должно это исправить. Я думаю.