【问题标题】:Pyqt prevent combobox change valuePyqt 防止组合框改变值
【发布时间】:2018-03-03 23:14:50
【问题描述】:

我在 PyQT4 中有四个组合框。如果用户更改第一个组合框中的值,则第二个组合框中的值将被更改,类似地,如果第二个组合框中的值发生更改,则会导致第三个组合框的更改和第四个组合框的相同情况。我想要的是当我更改第一个组合框的值时,它应该只改变第二个组合框,而不会影响第三个和第四个组合框的变化。我如何在 PyQt 中做到这一点?

我在每个组合框上都有 changedIndex 事件设置。

【问题讨论】:

  • 请提供您的代码示例以便更好地理解您。
  • 你有没有按照我的回答完成?如果有效,请不要忘记正确标记它,如果无效,请告诉我您得到了什么。

标签: python pyqt pyqt4 qcombobox


【解决方案1】:

要防止对象在给定上下文中发出信号,您必须使用blockSignals()

bool QObject.blockSignals (self, bool b)

如果 block 为真,则该对象发出的信号被阻塞(即, 发出信号不会调用任何连接到它的东西)。如果阻塞 为假,不会发生这样的阻塞。

返回值是signalsBlocked()的前一个值。

请注意,destroy() 信号将被发出,即使信号 因为该对象已被阻止。

为了简化任务,setCurrentIndex() 方法将被覆盖。

class ComboBox(QComboBox):
    def setCurrentIndex(self, ix):
        self.blockSignals(True)
        QComboBox.setCurrentIndex(self, ix)
        self.blockSignals(False)

下面的例子展示了它的用法:

class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setLayout(QVBoxLayout())

        l = [str(i) for i in range(5)]
        cb1 = ComboBox(self)
        cb1.addItems(l)

        cb2 = ComboBox(self)
        cb2.addItems(l)

        cb3 = ComboBox(self)
        cb3.addItems(l)

        cb4 = ComboBox(self)
        cb4.addItems(l)

        cb1.currentIndexChanged.connect(cb2.setCurrentIndex)
        cb2.currentIndexChanged.connect(cb3.setCurrentIndex)
        cb3.currentIndexChanged.connect(cb4.setCurrentIndex)

        self.layout().addWidget(cb1)
        self.layout().addWidget(cb2)
        self.layout().addWidget(cb3)
        self.layout().addWidget(cb4)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

【讨论】:

  • 感谢您的回答。
【解决方案2】:

我无法为您提供确切的代码,但从概念上讲,您可以在全局级别设置一些标志,当您不希望触发事件时,您可以简单地返回函数调用而无需在第一行

大概是这样的

Boolean flag3rdCombo  = false;

function onchangesecondCombo(){

    if (flag3rdCombo){
        return;
    }

    .....

}

【讨论】:

  • 问题有标签python,不是javascript。
  • 再次阅读我的答案。我明确表示我无法为您提供确切的代码,但从概念上讲可以做到这一点。只有傻瓜才会想到这样的事情
  • 又是同样的想法 伙计这是给概念 你明白概念是什么意思吗??
  • 反正我没时间给你解释。
猜你喜欢
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
相关资源
最近更新 更多