2011-10-07 22 views
5

Tôi sử dụng GUI Tkinter để thực hiện quá trình đo lường và phân tích, về cơ bản sẽ được thực hiện bằng một nút bấm. Kể từ những phép đo có thể mất một thời gian, tôi đã cố gắng để bao gồm một thanh tiến trình, cụ thể là cái này:GUI Tkinter của tôi quá ... tĩnh?

http://tkinter.unpythonic.net/wiki/ProgressMeter

Nhưng khi tôi làm đầu quá trình, toàn bộ cửa sổ Tkinter của tôi biến thành vô nghĩa cho đến khi đo lường được thực hiện và nó kinda tải lại chính nó, với thanh tiến trình của tôi đặt quá 100%. Đây không phải là điều tôi muốn xảy ra.

Điều gì đã xảy ra ở đó? Tôi khá mới với toàn bộ điều này, vì vậy tôi không có tất cả các công cụ tôi đoán. Tôi có cần phải giới thiệu một sợi riêng biệt hoặc một cái gì đó như thế, để đo lường và mainloop tkinter (là những gì đó là?) Chạy đồng thời? Nếu vậy, làm thế nào để tôi làm điều đó?

Trả lời

0

gọi widget.update()/root_window.update() mỗi khi bạn cập nhật các thanh tiến trình

+1

Cập nhật nguy hiểm khi gọi (không quá nguy hiểm, nhưng đúng hơn, có thể dẫn đến các tác dụng phụ không mong muốn). Như một quy tắc chung, nếu bạn không biết tại sao nó lại chán nản, bạn không nên gọi nó. Thông thường, 'update_idletasks' là lựa chọn tốt hơn. –

2

Thực hiện một progressbar

progress = ttk.Progressbar(bottommenuframe, orient=HORIZONTAL, length=100, maximum=190073,  mode='determinate') 
progress.pack(side=RIGHT) 

progress.start() ## this starts the progressbar 

sau đó trong phân tích của bạn (đây là đoạn từ mã của tôi mà xử lý một tập tin 67MB.):

def analysisfunction(): 
    progress.step(1) 
    ##do some analysis 
    root.after(0, analysisFunction) 

    if job == complete: 
     stop 

Giống như tôi đã nói điều này sẽ hoạt động với tệp 67MB và tkinter của tôi. Hy vọng rằng sẽ giúp một chút :)

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