【问题标题】:How can I disable a QCheckBox WITHOUT triggering an event?如何在不触发事件的情况下禁用 QCheckBox?
【发布时间】:2015-06-04 22:23:51
【问题描述】:

我想知道是否有在 pyqt“WITHOUT”触发事件的复选框(QCheckBox)上禁用(setCheckState)?所以这只是一个显示更改,现在取消勾选复选框,但没有触发我连接到的方法。感谢您的帮助。

如果可能的话,我会喜欢一个基本的例子。

【问题讨论】:

    标签: python pyqt qcheckbox


    【解决方案1】:

    您可以在禁用 QCheckBox 之前简单地阻止信号,并且 之后重新启用它们。假设 chk 是您的 QCheckBox 对象只是做:

    chk.blockSignals()
    # then you change the checkbox as you want
    chk.unblockSignals()
    

    【讨论】:

    • blockSignals() 的最大缺点是它会阻止小部件的 所有 信号——包括 Qt 内部连接的信号。由于意外的副作用,这有时会使它成为一个错误陷阱。
    • @ekhumoro ...很高兴知道。这对我的目的来说很好,因为我在取消选中后直接启用。但是,是否很想听听您的替代方案?这似乎是一个经常有用的场景......在不触发事件的情况下操作 ui。
    • @NickvanDiem。尽管我的评论大体上是正确的,但在我发表评论时,我确信我有一个更简单的选择。但似乎我的记忆在欺骗我,事实并非如此。我现在能想到的唯一真正的选择是断开并重新连接信号 - 这当然更安全,但不是那么简单。
    • @ekhumoro ...没问题。非常感谢您的思考:)
    【解决方案2】:

    @mguijarr 的回答说明了一切,但显然他们稍微改变了功能。

    在 QT 5.14.0 中是:

    chk.blockSignals(True)
    chk.blockSignals(False)
    # same syntax for c++ and py at this place
    

    docs for python

    docs for c++

    (也许这最好是一个评论,但我需要更多的 cmets 代表)

    【讨论】:

    • 在文档的哪个部分表明可以使用 unblockSignals?我看不出这种方法有什么变化。
    • 昨天已经太晚了...我想更正过时的信息,但只是重复了第二句话。我修好了。
    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2012-09-01
    • 2017-12-15
    • 1970-01-01
    相关资源
    最近更新 更多