python - 输入QLineEdit时如何将默认光标模式从插入更改为覆盖
问题描述
正如标题所暗示的,我的目标是将默认光标模式(插入字符)更改为覆盖模式。
我有一个附加到 QLineEdit 对象的验证器
expression = QtCore.QRegExp(r'(^[A-Z0-9_]{4})-([A-Z0-9_]{6})-([A-Z0-9_]{6})-([A-Z0-9_]{4})-([A-Z0-9_]{2})-([A-Z0-9_]{6})')
object = QtGui.QRegExpValidator(expression, self)
QLineEdit 组件的默认值为:
object.setText('____-______-______-____-__-______')
输入 QLineObject 时,为了写任何东西,我必须选择一个下划线,将其更改为所需的字符,选择另一个,依此类推。或者,我可以选择整个字符串,将其删除,然后写入完整的字符串。然而,关键是有时我必须在不同的位置更改一些字符串并保持不变的下划线不变。一个接一个地选择和改变一个字符是可行的,但很乏味。当光标焦点位于一个对象上时,将光标模式从插入更改为覆盖将是更清洁的解决方案。
解决方案
QLineEdit 没有覆盖模式。但是 QTextEdit 和 QPlainTextEdit 有 overwriteMode 和 setOverwriteMode(bool)。如果您可以使用 QTextEdit,您可以将其子类化并拥有自己的 keyReleaseEvent。这是一个测试覆盖模式的快速示例。每次用户按下键盘上的 Insert 键时,都会切换 overwriteMode。
from PyQt5.QtWidgets import (QApplication, QMainWindow, QTextEdit)
from PyQt5 import QtCore
import sys
class OverwriteTextBox(QTextEdit):
def __init__(self, parent=None):
super(OverwriteTextBox, self).__init__(parent=parent)
def keyReleaseEvent(self, event):
key = event.key()
if (key == QtCore.Qt.Key_Insert):
print('insert')
self.setOverwriteMode(not self.overwriteMode())
else:
# release keyrelease for normal behaviors
super().keyReleaseEvent(event)
class Example(QMainWindow):
def __init__(self, parent=None):
super(Example, self).__init__(parent=parent)
self.setGeometry(300, 200, 570, 450)
self.setWindowTitle("Overwrite test")
self.textbox = OverwriteTextBox(parent=self)
self.textbox.setGeometry(50, 50, 200, 50)
app = QApplication(sys.argv)
example = Example()
example.show()
sys.exit(app.exec_() )
推荐阅读
- delphi - 如何找到丢失的 TActionList
- java - 通过 JAVA 中的“For”循环使用“Scanner”和“charAt(0)”读取第一个输入字符
- javascript - 从父组件 vue.js 接收数据:prop 正在变异,
- json - 来自 json 响应的结构
- haskell - Haskel:如何强制评估函数并按顺序写入文件?
- node.js - 如何从 MS Chatbot 内的 m.me 链接中捕获推荐参数?
- java - Netflix 尤里卡微服务
- node.js - 在 Feathersjs 中使用 Winston 显示相关 ID
- sql - 如何编写 SQL 以在条件满足时返回一行,如果不满足则返回另一行
- javascript - 正在接收数据但无法显示