PyQt5 QSpinBox – 断开它的连接

  • Post category:Python

PyQt5是Python的图形界面库之一,它提供了许多常用的组件和控件,其中之一就是QSpinBox(数字调节框)。在使用QSpinBox时,可能需要断开它的连接,这里就来详细讲解一下如何实现。

断开连接

在PyQt5中,可以使用disconnect()方法来断开信号与槽之间的连接。QSpinBox中的setValue()方法会触发valueChanged信号,所以可以通过disconnect()方法来断开它的连接。下面是一个示例:

from PyQt5.QtWidgets import QApplication, QSpinBox, QVBoxLayout, QWidget

app = QApplication([])
window = QWidget()

spinbox = QSpinBox()
spinbox.setMaximum(100)

# 创建一个槽函数
def on_value_change(value):
    print(value)

# 连接信号与槽
spinbox.valueChanged.connect(on_value_change)

# 断开信号与槽
spinbox.valueChanged.disconnect(on_value_change)

layout = QVBoxLayout()
layout.addWidget(spinbox)

window.setLayout(layout)
window.show()
app.exec()

这个示例中,创建了一个QSpinBox和一个槽函数on_value_change,然后将它们连接到一起。最后再调用disconnect()方法来断开它们之间的连接。

示例1:使用Lambda表达式断开连接

在上面的示例中,我们使用了一个函数来作为槽函数,但是有时候我们可以使用Lambda表达式来简化代码,如下:

# 连接信号与槽
spinbox.valueChanged.connect(lambda value: print(value))

# 断开信号与槽
spinbox.valueChanged.disconnect(lambda value: print(value))

使用Lambda表达式可以让代码更加简洁。

示例2:多个QSpinBox断开连接

如果有多个QSpinBox需要断开连接,可以使用sender()方法来获取发出信号的对象,然后再调用disconnect()方法来断开连接。先看一个示例:

from PyQt5.QtWidgets import QApplication, QSpinBox, QVBoxLayout, QWidget

app = QApplication([])
window = QWidget()

spinbox1 = QSpinBox()
spinbox1.setMaximum(100)

spinbox2 = QSpinBox()
spinbox2.setMaximum(100)

# 创建一个槽函数
def on_value_change(value):
    sender = window.sender()
    print(sender.objectName(), value)

# 连接信号与槽
spinbox1.valueChanged.connect(on_value_change)
spinbox2.valueChanged.connect(on_value_change)

# 断开信号与槽
spinbox1.valueChanged.disconnect(on_value_change)
spinbox2.valueChanged.disconnect(on_value_change)

layout = QVBoxLayout()
layout.addWidget(spinbox1)
layout.addWidget(spinbox2)

window.setLayout(layout)
window.show()
app.exec()

在这个示例中,我们创建了两个QSpinBox,并将它们连接到同一个槽函数on_value_change。在槽函数中,使用window.sender()方法来获取发出信号的对象,然后打印出它的对象名和值。最后使用disconnect()方法来断开连接。

注意:断开连接时要传入槽函数对象,而不是Lambda表达式。因为每次使用Lambda表达式都会创建一个新的函数对象,如果使用Lambda表达式传入,那么每次断开连接都会断开一个新的连接,而不是原来的连接。