【问题标题】:Auto format byte array in QLineEditQLineEdit 中的自动格式化字节数组
【发布时间】:2026-01-13 22:40:02
【问题描述】:

我希望我的 QLineEdit 在每两个字符之后插入一个空格,我想要他的,因为在那个 QLineEdit 中我将插入十六进制字符。 我从这篇文章中尝试了下面的代码:PyQt auto-space qlineedit characters,它工作得很好,但是当我想删除一个字符时,它只有在出现最后一个空格时才有效,然后我不能删除任何东西。

from PyQt5.QtWidgets import QLineEdit, QApplication

class LineEdit(QLineEdit):
    def  __init__(self, *args, **kwargs):
        QLineEdit.__init__(self, *args, **kwargs)
        self.textChanged.connect(self.onTextChanged)
        self.setValidator(QRegExpValidator(QRegExp("(\\d+)")))

    def onTextChanged(self, text):
        if len(text) % 6 == 5:
            self.setText(self.text()+" ")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    le = LineEdit()
    le.show()
    sys.exit(app.exec_())

【问题讨论】:

  • 嗯,您的正则表达式似乎不适用于十六进制字符......无论如何,如果您只想接受十六进制,您可以使用带有“H”掩码的setInputMask()。您可以输入任意数量的“HH”,直到输入的可能限制;例如,如果您只想要 8 对:self.setInputMask(' '.join('HH' for i in range(8)))(前两个引号之间有一个空格,以防您看到断行)。

标签: python pyqt5 qlineedit


【解决方案1】:

如果你需要多次使用这个类,我认为最好的方法是从 QLineEdit 继承一个自定义类(就像你已经做过的那样),但添加 setInputMask() 到它。

试试这个:

from PyQt5.QtWidgets import QLineEdit, QApplication
import sys

class HexLineEdit(QLineEdit):
    def  __init__(self, *args, **kwargs):
        QLineEdit.__init__(self, *args, **kwargs)
        self.setInputMask("HH HH HH HH")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    le = HexLineEdit()
    le.show()
    sys.exit(app.exec_())

【讨论】:

    最近更新 更多