QSpinBox失去焦点时不要触发editingFinished
时间: 2024-01-14 09:03:53 浏览: 225
可以通过重载 QSpinBox 的 focusOutEvent 方法来实现失去焦点时不触发 editingFinished 信号的功能。具体实现如下:
```python
from PyQt5.QtWidgets import QSpinBox, QAbstractSpinBox, QApplication
from PyQt5.QtCore import Qt
class CustomSpinBox(QSpinBox):
def __init__(self, parent=None):
super().__init__(parent)
def focusOutEvent(self, event):
if self.lineEdit().hasSelectedText():
# 如果当前 spinbox 中有文本被选中,则不处理焦点事件
event.ignore()
else:
# 否则,调用父类的方法处理焦点事件,这里不会触发 editingFinished 信号
super().focusOutEvent(event)
if __name__ == '__main__':
app = QApplication([])
spinBox = CustomSpinBox()
spinBox.setRange(0, 100)
spinBox.setSingleStep(1)
spinBox.setAlignment(Qt.AlignCenter)
spinBox.setButtonSymbols(QAbstractSpinBox.NoButtons)
spinBox.setFixedWidth(50)
spinBox.show()
app.exec_()
```
在上述代码中,重载了 QSpinBox 的 focusOutEvent 方法,如果当前 spinbox 中有文本被选中,则不处理焦点事件,否则调用父类的方法处理焦点事件。这样,当 spinbox 失去焦点时不会触发 editingFinished 信号。
阅读全文