我在同一页面上有一个QLineEdit(对于数据A)和QTextEdit(对于数据B)的面板。问题是光标在两个字段中都闪烁,我们无法轻易看到焦点在哪里。使用焦点事件(我需要)时会出现2个光标的问题。
我在每个字段上使用了focusInEvent和focusOutEvent,如下所示:
self.textedit_desc.focusInEvent = self.Change_fi_desc
self.textedit_desc.focusOutEvent = self.Change_fo_desc
self.lineedit_ref.focusOutEvent = self.Change_fo_ref
def Change_fo_ref(self, ev):
self.MyNeed()
self.lineedit_ref.setCursorPosition(0) # left
ev.accept()
def Change_fo_desc(self, ev):
self.MyNeed()
self.textedit_desc.setStyleSheet("background-color: rgb(243, 243, 243);")
self.textedit_desc.setCursorWidth(0)
ev.accept()
def Change_fi_desc(self, ev):
self.lineedit_ref.setCursorPosition(0) # left
self.textedit_desc.setStyleSheet("background-color: rgb(255, 255, 240);")
self.textedit_desc.setCursorWidth(1)
self.textedit_desc.moveCursor(13) # end of line
ev.accept()
由于两个游标问题,我在文本编辑字段中添加了颜色更改。 但即使我使用焦点事件,我也希望有一个光标。
答案 0 :(得分:0)
多个游标的问题发生是因为您完全覆盖了默认行为,而不是重新实现它。
由于看起来你只需要监听焦点事件,我认为事件过滤器会更合适。
以下是基于示例代码使用事件过滤器的方法:
class MainWindow(QtGui.QMainWindow):
def __init__(self):
...
self.textedit_desc.installEventFilter(self)
self.lineedit_ref.installEventFilter(self)
def eventFilter(self, source, event):
if event.type() == QtCore.QEvent.FocusIn:
if source is self.textedit_desc:
self.lineedit_ref.setCursorPosition(0) # left
self.textedit_desc.setStyleSheet(
"background-color: rgb(255, 255, 240);")
self.textedit_desc.setCursorWidth(1)
self.textedit_desc.moveCursor(13) # end of line
elif event.type() == QtCore.QEvent.FocusOut:
if source is self.textedit_desc:
self.MyNeed()
self.textedit_desc.setStyleSheet(
"background-color: rgb(243, 243, 243);")
self.textedit_desc.setCursorWidth(0)
elif source is self.lineedit_ref:
self.MyNeed()
self.lineedit_ref.setCursorPosition(0) # left
return super(MainWindow, self).eventFilter(source, event)