2012-05-01 31 views
7

Tôi đang cố gắng xóa văn bản bên trong hộp văn bản sau khi đợi 5 giây, nhưng thay vào đó chương trình sẽ không chạy và ngủ trên mọi thứ khác. Ngoài ra là có một cách để tôi chỉ làm cho hộp văn bản của tôi ngủ để tôi có thể chạy mã khác trong khi văn bản được đông lạnh?Python time.sleep

from time import time, sleep 
from Tkinter import * 

def empty_textbox(): 
    textbox.insert(END, 'This is a test') 
    sleep(5) 
    textbox.delete("1.0", END) 

root = Tk() 

frame = Frame(root, width=300, height=100) 
textbox = Text(frame) 

frame.pack_propagate(0) 
frame.pack() 
textbox.pack() 

empty_textbox() 

root.mainloop() 
+1

Tôi không có nhiều kinh nghiệm với Tkinter, nhưng tôi khá chắc chắn bạn cần phải hoặc sử dụng một số loại vòng lặp sự kiện hoặc một chuỗi riêng biệt. – sberry

+1

@sberry: chắc chắn không phải là một chuỗi và đã có vòng lặp sự kiện đang chạy. Điều này được giải quyết một cách trivially bằng cách sử dụng 'after' đặt một sự kiện trên hàng đợi được xử lý tại một thời điểm nhất định trong tương lai. –

Trả lời

11

Bạn thực sự nên sử dụng một cái gì đó giống như Tkinter after method hơn time.sleep(...).

Có ví dụ về cách sử dụng phương thức sau tại other stackoverflow question này.

Dưới đây là một phiên bản sửa đổi của kịch bản của bạn có sử dụng sau phương pháp:

from time import time, sleep 
from Tkinter import * 

def empty_textbox(): 
    textbox.delete("1.0", END) 

root = Tk() 

frame = Frame(root, width=300, height=100) 
textbox = Text(frame) 

frame.pack_propagate(0) 
frame.pack() 
textbox.pack() 

textbox.insert(END, 'This is a test') 
textbox.after(5000, empty_textbox) 

root.mainloop() 
+1

Cảm ơn Bạn đã giúp rất nhiều – Crispy

Các vấn đề liên quan