如何让代码暂停执行?我需要程序在第一段代码执行完毕后再逐步执行下一段代码

前端开发 2026-07-12

我打算开发一个视频编辑程序。

在程序以渲染进程加载时,我需要实现进度条。

我的代码是

Part 1 - 函数进度条先被调用。

def ProgessBar():
    import tkinter as tk
    from tkinter.ttk import Progressbar

    global bar
    windowRenderLoading = tk.Tk()
    windowRenderLoading.title("Loading...")
    windowRenderLoading.geometry("430x150+720+600")  
    bar = Progressbar(windowRenderLoading, orient="horizontal",length=350,mode='determinate').place(x=40,y=50)
    Render()

以及

Part 2 - 渲染函数在进度条函数的最后一行被调用。

def Render():
    from moviepy import VideoFileClip, ImageClip ,CompositeVideoClip , TextClip

    clip = VideoFileClip("Test.mp4")
    image = ImageClip("Test Short Video Size Background Banner 4.png")
    final_clip = CompositeVideoClip([clip,image])
    final_clip.write_videofile("Clip001.mp4", fps=clip.fps)

关于Part 1和 Part 2在代码中可以正常运行。But我在Part 1与 Part 2的执行顺序上遇到了问题。 "当我运行我的代码时,windowRenderLaoding不会先出现。相反,程序会先渲染(CompositeVideoClip),直到完成第一项渲染,然后windowRenderLaoding才会在那之后出现。

我需要程序先显示windowRenderLaoding(它会显示加载条),再渲染视频。如何让我的Part 2代码延迟执行?

解决方案

tkinter 你必须运行 mainloop() 来开始显示带控件的窗口。
如果在运行 mainloop() 之前先运行 Render(),那么就不能显示窗口。
通常程序会使用按钮(手动)在显示窗口后执行额外的代码。

如果你想自动启动,可以使用

windowRenderLoading.after(100, Render)

在窗口启动后100ms自动启动。
它必须是函数名 Render,不带 (),并且 after 将在稍后使用 () 来执行它。


bar = Progressbar(windowRenderLoading, orient="horizontal",length=350,mode='determinate')
bar.place(x=40,y=50)

windowRenderLoading.after(100, Render)

windowRenderLoading.mainloop()

但这会带来另一个问题,因为 Render 会阻塞对GUI的访问。
如果你有一些按钮/控件,它们将不会响应——GUI会冻结。
bar 更新显示进度的数值也可能存在问题。
它可能需要在另一个 thread 的线程中运行 Render,并使用 queue 将信息发送给带GUI的主线程。

python - bar progress in tkinter with thread - Stack Overflow

另一个问题可能是从moviepy获取进度信息。

python - MoviePy - getting progress bar values - Stack Overflow

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章