【发布时间】:2015-08-15 02:24:41
【问题描述】:
所以我有这部分代码,它做了一件简单的事情:它启动一个脚本,当脚本正在处理时,一个 throbber 被设置。
def go(self):
if ui.chk.isChecked():
self.startThrobber()
script = subprocess.check_call(r'"C:\Program Files\FME\fme.exe"', shell=False)
if script == 0:
self.stopThrobber() # opens a QMessageBox and stops throbber
else:
QMessageBox.information(self.popup(), "Errpr", "Error !")
在尝试了不同的方法(QThread、subprocess.Popen ...)之后,这是我让它工作的最接近的方法。
唯一不起作用的是 throbber 不会在 subprocess 执行之前立即启动,它会在 之后启动,因此它永远不会停止.
那么为什么在执行stopThrobber() 时颤动没有结束?
以及为什么startThrobber 没有在subprocess 之前执行(我很确定这是一个子进程的事情,但我对这一切都很陌生,直到昨天才听说过线程)
编辑: 单引号只是一个打字错误,对不起。还是没有解决问题。
【问题讨论】:
-
表示原始字符串的单引号包含“shell”参数。将结束单引号移动到结束双引号和逗号之间
-
这个方法是不是和你的previous method有完全相同的问题,因为
subprocess.check_call()是一个阻塞调用?因此,在子进程运行时,由于没有将控制权返回给 Qt 事件循环,因此 throbber 无法正确设置动画? -
@three_pineapples 是的,还是同样的问题,但由于我使用了不同的方法,我认为最好问一个新问题
-
@JS。是的,抱歉,这只是我的打字错误。在我的代码中它是正确的,但它不起作用
标签: python user-interface pyqt subprocess pyqt5