gpt4 book ai didi

python 显示代码的当前状态

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:08 24 4
gpt4 key购买 nike

我有以下代码:

from Tkinter import *

root = Tk()

def count():
for i in range(300):
Display.configure(text = 'The current number is: '+str(i))

Button = Button(root, text = 'Start', command = count)
Button.pack()

Display = Label(root)
Display.pack()

root.mainloop()

我希望在点击“开始”按钮后在计数过程中显示当前数字,但它不起作用。它只在计数结束后才显示数字,因此计数后仅显示:“当前数字是:299”。(重点是我想知道如何显示代码的当前状态。(我需要制作一个应用程序来收集特定文件,而不是将其复制到特定位置,并且我希望它显示当前正在复制的文件。该应用程序可以与显示当前文件的异常(exception)一起工作。我尝试测试显示与上面的代码。)

最佳答案

在您的示例代码中,问题在于,首先,显示内容没有在循环内更新的变化,其次,如果它会更新,那么看到除最后一个数字之外的任何其他数字都会太快。

一个简单的修复方法是调用 root.update_idletasks() 来更新显示的更改。

from Tkinter import *
import time

root = Tk()

def count():
for i in range(300):
Display.configure(text = 'The current number is: '+str(i))
root.update_idletasks()
time.sleep(0.01) # just to see something

Button = Button(root, text = 'Start', command = count)
Button.pack()

Display = Label(root)
Display.pack()

root.mainloop()

一个可能更好的方法是使用协程(我在这里将其包装到装饰器中)和 after_idle:

import time
from Tkinter import *

root = Tk()

def updatesdisplay(func):
def driver(iterator):
try: next(iterator)
except StopIteration: pass
else: root.after_idle(driver, iterator)
def wrapped():
driver(func())
return wrapped

@updatesdisplay
def count():
for i in range(300):
time.sleep(0.005) # just to see something
Display.configure(text = 'The current number is: '+str(i))
yield # chance to update display here

Button = Button(root, text = 'Start', command = count)
Button.pack()

Display = Label(root)
Display.pack()

root.mainloop()

关于python 显示代码的当前状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18527864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com