2013-07-27 99 views
1

我正在研究一个进度条,用于跟踪pygame中的某个函数。python 2.7 while循环,ttk.progressbar不工作

以下代码导致必须强制退出的循环。我无法弄清我的错误。任何帮助都会很棒。

from Tkinter import * 
import ttk 
import sys 
import pygame 

myGui = Tk() 

myGui.title("Progress Bar") 
myGui.geometry("400x200+200+300") 

value_progress = StringVar() 

pygame.mixer.init() 
pygame.mixer.music.load("/home/david/Documents/aaa.mp3") 
pygame.mixer.music.play() 


def position(): 
    global value_progress 
    while pygame.mixer.music.get_busy() == True: 
     value_progress.set(float(pygame.mixer.music.get_pos())) 


b = Button(myGui, text="Start",) 
b.pack() 


p = ttk.Progressbar(myGui, variable=value_progress, 
        mode='determinate', length=350, 
        maximum= 512920) 
p.pack() 

我从shell调用函数。然后它失速并且不会出来。

这只是我工作中的进度条部分。但是,它会导致程序每次崩溃。

回答

2

不要循环。相反,尝试下面的代码:

def position(): 
    global value_progress 
    if pygame.mixer.music.get_busy(): 
     value_progress.set(float(pygame.mixer.music.get_pos())) 
     myGui.after(100, position) 

Tk.after(ms, f)呼叫f指定ms毫秒之后。