pyqt5 检测一个QTextEdit是否正在被编辑,如果是,就把它背景色变成红色。这里的编辑指的是光标正在闪烁
时间: 2024-03-09 09:51:18 浏览: 126
可以通过`QTextEdit`的`cursorPositionChanged()`信号来检测光标的位置是否发生变化。如果光标位置发生变化,就说明`QTextEdit`正在被编辑。代码如下:
```python
from PyQt5.QtWidgets import QApplication, QTextEdit
from PyQt5.QtGui import QTextCursor, QColor
class MyTextEdit(QTextEdit):
def __init__(self, parent=None):
super(MyTextEdit, self).__init__(parent)
self.cursorPositionChanged.connect(self.onCursorPositionChanged)
def onCursorPositionChanged(self):
if self.textCursor().hasSelection():
# 如果文本有选中部分,则不改变背景色
return
if self.textCursor().position() != self.textCursor().anchor():
# 如果光标位置有变化,则将背景色设置为红色
self.setStyleSheet("background-color: red")
else:
# 否则将背景色设置为白色
self.setStyleSheet("background-color: white")
if __name__ == '__main__':
app = QApplication([])
textEdit = MyTextEdit()
textEdit.show()
app.exec_()
```
这里我们自定义了一个`MyTextEdit`类,继承自`QTextEdit`。在`__init__`方法中连接了`cursorPositionChanged`信号到自定义的`onCursorPositionChanged`方法上。在`onCursorPositionChanged`方法中,我们通过`textCursor()`方法获取当前光标位置,如果光标位置有变化,则将背景色设置为红色。如果文本有选中部分,则不改变背景色。如果光标位置没有变化,则将背景色设置为白色。
阅读全文