当我按下QSpinbox中的箭头时,如何防止double valueChanged事件?

时间:2017-01-10 12:33:47

标签: qt pyqt5

可能是Qt错误,也可能是我的应用中的错误,我希望有人可以帮我诊断。

我正在构建一个使用qtdesigner和pyuic5构建的接口的PyQt5应用程序。

我的窗口中有QSpinBox小部件,我连接到两个这样的方法:

self.img1IndexBox.valueChanged.connect(self.changeImage1)
self.img2IndexBox.valueChanged.connect(self.changeImage2)

除了一件事,一切似乎在应用程序中都能正常工作:如果我将鼠标滚动到旋转框上,我可以使它增加值。如果我用文本更改值,一切正常。如果我在旋转框上使用键盘箭头,它可以正常工作。但是如果我点击旋转框中的向上或向下箭头,我会得到两个changeValue事件,一个双增量。就像我点击了两次。实际上,它甚至可以从动画中看出它正在为下压创建一个事件,而另一个则是在按钮重新启动时。

这可能只是一个库错误,或者在我的程序中可能导致这种情况的原因是什么?我该怎么调试呢?

2 个答案:

答案 0 :(得分:2)

通过将spinbox enable设置为false,您可能能够防止出现双重情况。 然后在处理大数据后将其启用为真。

点击向上/向下箭头 on_valuechanged ui-> spinbox-> setEnabled(false);

然后在函数on_valuechanged结束之前将其设置为true。 ui-> spinbox-> setEnabled(true);

答案 1 :(得分:0)

显然问题是事件触发了一个很长的例行程序,这会延迟"按钮释放"事件,这是足够的时间让系统认为用户实际上按住按钮,产生更多的事件......但我仍然有兴趣学习什么是一个很好的循环。是否有一个很好的pyqt-onic方法来启动该方法的线程?

http://www.qtcentre.org/archive/index.php/t-43078.html