gpt4 book ai didi

pyside - 如何在不触发 PySide 中的 valueChanged 回调的情况下设置小部件的值?

转载 作者:行者123 更新时间:2023-12-04 13:48:25 26 4
gpt4 key购买 nike

我想更新小部件的值,但为了防止无限循环,我需要防止调用此小部件的回调函数 .valueChanged信号。

以下示例完全按预期工作:

Qt = PySide

class MainWindow(Actor, Qt.QtGui.QMainWindow):
def __init__(self):
Qt.QtGui.QMainWindow.__init__(self)
Actor.__init__(self)
self.ui = Qt.loadUI('simulator.ui')
self.ui.horizontalSlider.valueChanged.connect(self.emit_weight_msg)

def emit_weight_msg(self, value):
self.send({'WeightMessage': {'val': value}})

def handle_WeightMessage(self, msg):
self.ui.horizontalSlider.valueChanged.disconnect(self.emit_weight_msg)
self.ui.horizontalSlider.setValue(msg["val"])
self.ui.horizontalSlider.valueChanged.connect(self.emit_weight_msg)

由于断开连接并重新连接 valueChanged信号似乎有点像hack,我想问一下是否存在更优雅的解决方案。

完整代码在这里: https://github.com/ceremcem/weighing-machine-testing

编辑

我正在寻找一种方法,例如:
def setValueSilent(QtObject, value):
tmp_callback = QtObject.get_callback_functions_that_are_set_in_python_code()
QtObject.valueChanged.disconnect(tmp_callback)
QtObject.setValue(value)
QtObject.valueChanged.connect(tmp_callback)

最佳答案

我认为如果你使用 blocksignals 那么它应该没问题。

def handle_WeightMessage(self, msg):
self.ui.horizontalSlider.blockSignals(True)
self.ui.horizontalSlider.setValue(msg["val"])
self.ui.horizontalSlider.blockSignals(False)

关于pyside - 如何在不触发 PySide 中的 valueChanged 回调的情况下设置小部件的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34990596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com