2016-01-12 3 views
-1

Я делаю программу, и у меня есть проблема. При использовании time.sleep(), как показано в коде, я бы хотел, чтобы он подождал 5 секунд после появления первой метки, а затем отобразил вторую, но вместо этого, когда я нажимаю кнопку «start», она ждет 5 секунд, а затем одновременно отображает обе метки. (Код я заинтересован в только в конце, в guess_number)Python Tkinter time.sleep()

Вот код:

from tkinter import * 
from tkinter import font 
from datetime import datetime 
import time 

class Window(Frame): 

    def __init__(self, master): 

     Frame.__init__(self, master) 
     self.master = master 
     self.master.resizable(0,0) 
     master.title("Arcade Games") 
     master.geometry("800x600+560+240") 
     now = datetime.now() 
     hour = now.hour 
     minutes = now.minute 
     b = Button(self, text="Guess the number", command=self.new_window,  cursor='hand2', relief='groove') 
     b.pack() 
     self.customFont = font.Font(master, font="Heraldica", size=12) 
     labelTime = Label(self.master, text=str(hour)+" : "+str(minutes), font=self.customFont) 
     labelTime.pack(side='bottom') 


    def new_window(self): 

     id = "Welcome to the 'Guess your number' game!\nAll you need to do is follow the steps\nand I will guess your number!\n\nClick the button to start!!" 
     self.window = Toplevel(self.master) 
     self.window.resizable(0,0) 
     self.label = Label(self.window, text=id, font=self.customFont) 
     self.label.pack(side="top", fill="both", padx=20, pady=20) 
     self.button = Button(self.window, text="Start", relief='groove') 
     self.button.config(width=20, height=2) 
     self.button.bind("<Button-1>", self.guess_number) 
     self.button.pack() 
     self.window.title("Guess the number") 
     self.window.geometry("400x300+710+390") 

    def guess_number(self, event): 

     self.button.destroy() 
     self.label.destroy() 
     labelGuess = Label(self.window, text="Pick any number.\nIt can be 3, 500 or even 1,324,324", font=self.customFont) 
     labelGuess.pack(padx=20, pady=20) 
     time.sleep(5) 
     labelGuess1 = Label(self.window, text="Now double it", font=self.customFont) 
     labelGuess1.pack(padx=20, pady=20) 


if __name__ == "__main__": 
    root = Tk() 
    view = Window(root) 
    view.pack(side="top", fill="both") 
root.mainloop() 

Любая помощь приветствуется!

+0

Вы сделали какие-либо исследования? Существует много вопросов о stackoverflow, связанных с использованием 'time.sleep' с tkinter. –

ответ

2

Вместо использования time.sleep() остановить главную задачу, попробуйте планировать события с Tkinter-х after(), например, так:

def guess_number(self, event): 
    self.button.destroy() 
    self.label.destroy() 
    labelGuess = Label(self.window, text="Pick any number.\nIt can be 3, 500 or even 1,324,324", font=self.customFont) 
    labelGuess.pack(padx=20, pady=20) 
    self.window.after(5000, self.make_guess1_visible) 

def make_guess1_visible(self): 
    labelGuess1 = Label(self.window, text="Now double it", font=self.customFont) 
    labelGuess1.pack(padx=20, pady=20) 
+0

, который работал отлично, но как это сделать, когда у меня есть 10 ярлыков, чтобы показывать один за другим? – ToucaN

+0

Ничего! понял :) – ToucaN

Смежные вопросы