Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更新循环中的进度条?_Python_Python 2.7_User Interface_Tkinter - Fatal编程技术网

Python 如何更新循环中的进度条?

Python 如何更新循环中的进度条?,python,python-2.7,user-interface,tkinter,Python,Python 2.7,User Interface,Tkinter,在循环中更新Tkinter进度条的简单方法是什么 我需要一个没有太多混乱的解决方案,所以我可以很容易地在我的脚本中实现它,因为它对我来说已经相当复杂了 假设代码是: from Tkinter import * import ttk root = Tk() root.geometry('{}x{}'.format(400, 100)) theLabel = Label(root, text="Sample text to show") theLabel.pack() status = La

在循环中更新Tkinter进度条的简单方法是什么

我需要一个没有太多混乱的解决方案,所以我可以很容易地在我的脚本中实现它,因为它对我来说已经相当复杂了

假设代码是:

from Tkinter import *
import ttk


root = Tk()
root.geometry('{}x{}'.format(400, 100))
theLabel = Label(root, text="Sample text to show")
theLabel.pack()


status = Label(root, text="Status bar:", bd=1, relief=SUNKEN, anchor=W)
status.pack(side=BOTTOM, fill=X)

root.mainloop()

def loop_function():
    k = 1
    while k<30:
    ### some work to be done
    k = k + 1
    ### here should be progress bar update on the end of the loop
    ###   "Progress: current value of k =" + str(k)


# Begining of a program
loop_function()
从Tkinter导入*
导入ttk
root=Tk()
几何体(“{}x{}.”格式(400100))
标签=标签(根,text=“要显示的示例文本”)
标签包()
状态=标签(根,text=“状态栏:”,bd=1,浮雕=凹陷,锚定=W)
包装状态(侧面=底部,填充=X)
root.mainloop()
def loop_函数():
k=1

而k这里有一个持续更新
ttk
progressbar的快速示例。您可能不想将
sleep
放在GUI中。这只是为了减缓更新速度,以便您可以看到它的变化

from Tkinter import *
import ttk
import time

MAX = 30

root = Tk()
root.geometry('{}x{}'.format(400, 100))
progress_var = DoubleVar() #here you have ints but when calc. %'s usually floats
theLabel = Label(root, text="Sample text to show")
theLabel.pack()
progressbar = ttk.Progressbar(root, variable=progress_var, maximum=MAX)
progressbar.pack(fill=X, expand=1)


def loop_function():

    k = 0
    while k <= MAX:
    ### some work to be done
        progress_var.set(k)
        k += 1
        time.sleep(0.02)
        root.update_idletasks()
    root.after(100, loop_function)

loop_function()
root.mainloop()
从Tkinter导入*
导入ttk
导入时间
最大值=30
root=Tk()
几何体(“{}x{}.”格式(400100))
progress_var=DoubleVar()#这里有整数,但当计算百分比通常浮动时
标签=标签(根,text=“要显示的示例文本”)
标签包()
progressbar=ttk.progressbar(根,变量=progress\u var,最大值=MAX)
progressbar.pack(填充=X,展开=1)
def loop_函数():
k=0

当k使用
root.update\u idletasks()
时,会使windows无响应。但是
root.update()
不会使窗口无响应。@skarfa:不,在tkinter gui程序中调用
time.sleep()
会使该窗口无响应(因为它临时挂起gui的
mainloop
)。OP在他们的描述中暗示了这一点。