2016-12-01 76 views
0

我正在使用python来创建一个闹钟,它提出了数学问题。但我的问题是如果用户提供了错误的答案,我想继续提问。请帮助我。我使用tkinter来创建在askyesno报警clock.But,yes和no只能是是executing.So请帮我提高代码数学问题报警

enter code here 
from tkinter import * 
from tkinter import ttk 
import time 
import os 
import sys 
from tkinter import messagebox 

root = Tk() 
root.title("Alarm clock") 
def SubmitButton(): 
AlarmTime= enter1.get() 
Message1() 
CurrentTime = time.strftime("%H:%M") 
print("the alarm time is: {}".format(AlarmTime)) 
while AlarmTime != CurrentTime: 
    CurrentTime = time.strftime("%H:%M") 
    time.sleep(1) 
    x = 0 
    y = 0 
while AlarmTime == CurrentTime: 
    if x == 0: 
     x+=1 
     os.system("start alarm-music.mp3") 
    if y<1: 
     label2.config(text = "Alarm music playing.....") 
     messagebox.showinfo(title= 'Alarm Message', message= " {}".format(enter2.get())) 

    while True: 
     if y<1: 
      messagebox.askquestion("answer the question in yes or no","(9^5)-1+(4|3)=18",icon='question') 
      y+=1 
     if True: 
      break     
     else: 

      os.system("start alarm-music.mp3") 
      messagebox.askyesno("answer the  question","9*71=647",icon='question') 
      if True: 
      sys.close() 
      else: 
      os.system("start alarm-music.mp3") 

     def Message1(): 
     AlarmTimeLable= enter1.get() 
     label2.config(text="the Alarm time is Counting...") 
     messagebox.showinfo(title = 'Alarm clock', message = 'Alarm will Ring at {}'.format(AlarmTimeLable))  
     alarm1 = ttk.Frame(root) 
     alarm1.pack() 
     alarm1.config(height = 200, width = 200) 

     alarmtime1= ttk.Label(alarm1,text = "Enter the Alarm time :") 
     alarmtime1.pack() 


     enter1 = ttk.Entry(alarm1, width = 100) 
     enter1.pack() 
     enter1.insert(3,"Please enter 24-hr format here") 

     AlarmMessage= ttk.Label(alarm1, text="Alarm Message:") 
     AlarmMessage.pack() 

     enter2= ttk.Entry(alarm1, width=100) 
     enter2.pack() 

     button1= ttk.Button(alarm1, text= "submit", command=SubmitButton) 
     button1.pack() 
     label2= ttk.Label(alarm1) 
     label2.pack() 



     root.mainloop() 

回答

1

此代码

if True: 
     break 

老是打断你的周期。为了避免这种尝试对话的结果保存到任何变量,然后验证它的值:

if y<1: 
    answer = messagebox.askquestion("answer the question in yes or no","(9^5)-1+(4|3)=18",icon='question') 
    y+=1 
    if answer == 'yes': 
     break 
... 
answer = messagebox.askyesno("answer the question","9*71=647",icon='question') 
if answer == True: 
    sys.close() 
else: 
    os.system("start alarm-music.mp3") 
... 
+0

我也想askquestion从user.So收到答案我创建了一个字典,而是在Tkinter的标签是不读书的问题。请帮助我那 –

+0

@AbhiramReddy如果你需要从用户接收字符串,你可以使用askstring()http://effbot.org/tkinterbook/tkinter-entry-dialogs.htm – neverwalkaloner

+0

我想从randomnly问一个问题dictionary.I使用了StringVar(),但它没有读取字典中的值。 –