我正在尝试使用 PyQt 为名为“HandBrake”的视频转换器应用程序构建一个简单的图形用户界面。
我的问题是,当我选择要转换的视频文件时,子进程 Popen 使用必要的参数启动 handbrake 应用程序,但在等待 handbrake 完成时,gui 被阻止,因此我无法进行任何更改。 (例如:我无法禁用按钮也无法更改其文本)
我不是在寻找更复杂的解决方案,例如进度条等,但我只想在等待程序完成转换时禁用按钮并更改其文本。
我怎样才能用 python 和 pyqt 做这样的事情?
def videoProcess():
self.pushButton.setEnabled(0)
self.pushButton.setText("Please Wait")
command = "handbrake.exe -i somefile.wmv -o somefile.mp4"
p = subprocess.Popen(str(command), shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while 1:
line = p.stdout.readline()
if not line:
self.pushButton.setEnabled(1)
break
最佳答案
既然你已经在 Qt 领域,你可以做这样的事情:
from PyQt4.QtCore import QProcess
class YourClass(QObject):
[...]
def videoProcess(self):
self.pushButton.setEnabled(0)
self.pushButton.setText("Please Wait")
command = "handbrake.exe"
args = ["-i", "somefile.wmv", "-o", "somefile.mp4"]
process = QProcess(self)
process.finished.connect(self.onFinished)
process.startDetached(command, args)
def onFinished(self, exitCode, exitStatus):
self.pushButton.setEnabled(True)
[...]
关于python - 子进程 Popen 阻塞 PyQt GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5613922/