gpt4 book ai didi

python - 进度条(ttk.Progressbar)与 tkinter 中的 python 不显示

转载 作者:行者123 更新时间:2023-11-28 22:55:44 34 4
gpt4 key购买 nike

在 Python 中使用 ttk.Progressbar(在 tkinter GUI 中),我试图在按下按钮时显示进度条。单击 gui 上的“分析”按钮将调用脚本中的函数分析,我的意思是它是一种三级火箭:

  1. grid() progressbar-widget 将其添加到大型机,然后 start() 它。

  2. 进行实际计算(在我的系统中大约需要三秒钟测试运行)

  3. stop() 进度条和 grid_remove() 它再次向用户隐藏它,现在作业已完成。

如果我注释掉步骤 3,进度条将按预期显示和启动,同时执行步骤 2。但是,如果第三步仍然存在,则进度条永远不会首先显示。现在,由于第二步中的工作正在以任何一种方式执行,我假设它可能与在同一函数调用中网格化和删除进度条小部件有关,但因为这是我的第一个真正的 gui 项目在 python 中,我对如何解决这个问题有点不知所措(如果这确实是问题所在)。有没有解决这个问题的方法,或者更优雅地完成相同任务的方法?按钮调用的函数如下:

def analyze():
# --Step 1--
progressbar.grid()
progressbar.start()

# --Step 2--
global analysis
analysis = analyzer.Analysis(file_path.get())
analysis.output_to_file()

# --Step 3--
progressbar.stop()
progressbar.grid_remove()

我会张贴我的界面图片以进一步澄清,但由于我当前的信誉评分不允许张贴图片,我希望我已经通过我的解释(和代码)使问题足够清楚。

最佳答案

为了让小部件在创建后出现,必须允许事件循环运行。这是因为屏幕上小部件的实际绘制是重绘事件的结果。

在创建和启动进度条后,您可以调用 update_idletasks,这将允许事件循环为此类重绘事件提供服务。但是,当您的计算正在运行时,您的应用程序可能会出现卡住状态。同样,这是因为必须允许事件循环为事件提供服务,而它在做其他事情时不能这样做。

解决此问题的正常方法是在线程或单独的进程中运行长时间运行的计算。

关于python - 进度条(ttk.Progressbar)与 tkinter 中的 python 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16471558/

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