0

我有一个 PySide 应用程序,它将许多按钮连接到一个函数调用,该函数调用衍生出一堆外部进程(这并不理想,但这是必要的)。

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

这让我想到了几个问题......

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

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

4

1 回答 1

0

我猜它的功能与其他所有 GUI 工具包的功能完全相同,即尝试在每次按下按钮时执行该功能。如果您不希望这样,那么您可以采取以下几种方法:

  1. 禁用按钮,直到功能完成
  2. 使用一个标记值,例如 self.running,并添加一个检查以查看它是否为 True。如果是,请返回。否则,将其设置为 True 并执行。只需记住在函数结束时将其设置回 False
  3. 做你提到的并断开功能与信号的连接

这些是主要的。我敢肯定还有一些更深奥的解决方案。

于 2013-04-11T16:06:47.280 回答