PyGTK ProgressBar在子进程启动之前显示一些东西

时间:2016-06-24 11:50:12

标签: ffmpeg subprocess pygtk

当我点击按钮之前启动我的gtk.ProgressBar.set_text('Text')时,我正试图让subprocess工作。

这是我的代码(完整来源here):

def on_button_clicked(self, button, progress_bar, filename):
  self.execute(progress_bar, filename)

def execute(self, progress_bar, filename):
  progress_bar.set_text('Encoding')
  progress_bar.pulse()

  cmd = ['ffmpeg', '-y',
         '-i', filename,
         '-r', '30',
         '/tmp/test-encode.mkv']

  process = sp.Popen(cmd, stdout=sp.PIPE, stderr=sp.PIPE)

  process.wait()

  progress_bar.set_text('Done')

我尝试在progress_bar.set_text('Encoding')中移动on_button_clicked(),但它没有改变任何内容:我点击按钮,作业完成(文件已​​正确生成并且正常),然后进度条显示“完成”。

我完成了我的作业并阅读了所有相关问题,但他们要么不使用subprocess,要么解析“常规”命令输出。

1 个答案:

答案 0 :(得分:0)

添加

progress_bar.set_text('Encoding')

while gtk.events_pending():     #   this forces GTK to refresh the screen
    gtk.main_iteration()
on_button_clicked()

强制GTK在继续之前刷新屏幕。

你甚至可以添加

progress_bar.set_text('Finished')
while gtk.events_pending():     #   this forces GTK to refresh the screen
    gtk.main_iteration()
一旦文件被写入,就在execute