如何在 PyQt GUI 中发出延迟信号?

How to emit a delayed signal in PyQt GUI?

在我的 PyQt GUI 应用程序中,有很多旋转框在其值更改时会触发冗长的设置例程。

我的问题是: 输入(大)数字时,每次输入一个数字时都会发出 spinBox.valueChanged() 信号。这导致设置函数被调用的次数超过必要的次数。

有没有办法延迟触发,直到我输入完数字,然后只触发一次信号? 您通常如何处理 GUI 中的这个问题?

我找到了 this,但我认为这将涉及为我想要在发出时调用的每个独特函数创建一个额外的计时器。好像不太优雅。

对于旋转框,有 keyboardTracking 属性。

如果禁用键盘跟踪,旋转框在键入时不会发出 valueChanged() 信号。它稍后发出信号,当按下 return 键时,当键盘焦点丢失时,或者当使用其他旋转框功能时,例如按箭头键。

我相信这可以解决您的问题。

您还可以连接到 editingFinished 信号,该信号在用户按下回车键或旋转框失去焦点后才会发出。但是,即使值未更改,您也会收到此信号,因此您可能需要根据最后一个值检查它,以防止不必要地 运行 冗长的例程。