防止PySide破坏Python

时间:2013-04-10 00:36:30

标签: python-2.7 pyqt pyside

我有一个PySide应用程序,它将一些按钮连接到一个函数调用,这个函数调用会旋转掉一堆外部进程(这不是理想的,但这是必要的。)

函数调用运行时间不到四分之一秒,但它仍然为用户提供了超出代码的机会,导致延迟,冻结或崩溃。

这引出了一些问题......

  1. 将callable连接到信号到底意味着什么?假设按钮A的点击信号连接到Python函数f。如果单击A,然后在f退出之前再次单击,PySide是否只是将另一个调用排队到f,还是做了更好的事情?

  2. 一种可能的解决方案是使f与信号断开连接,然后在退出之前重新连接。在我尝试重写之前,有没有人知道这是否有效,或者是否有更优雅的解决方案?

1 个答案:

答案 0 :(得分:0)

我猜它确实与其他GUI工具包完全相同,即每次按下按钮都会尝试执行该功能。如果您不想这样,那么您可以采取以下几种方法:

  1. 禁用按钮,直到功能完成
  2. 使用sentinel值,例如self.running,并添加一个检查以查看它是否为True。如果是这样,请返回。否则,将其设置为True并执行。请记住在功能结束时将其设置为False
  3. 执行您提到的操作并断开功能与信号的连接
  4. 这些是主要的。我确信那里也有一些更深奥的解决方案。