首页 > 解决方案 > 在 UI 上为 QLineEdit 的内容加下划线

问题描述

我想在 UI 上显示 QLineEdit 的内容时加下划线——这个数字恰好是一个格式化的(美元)数字,比如 $14,577

我不想在整个行编辑的长度上放置一个“边框底部”,我也不想使用 QT 设计器来设置字体/下划线,因为我只想在某些情况下下划线。

这是我用来显示和格式化数字的代码行。可以更改为包括下划线吗?

self.ui.car1.setText("${:,}".format(self.car1))

标签: pythonpyqt

解决方案


QLineEdit 不允许您实现您想要的,因此一种解决方法是使用单行配置 QTextEdit(结合此问题的一些答案)并使用 html 或 QTextCharFormat 设置下划线:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets


class LineEdit(QtWidgets.QTextEdit):
    returnPressed = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        super().__init__(parent)
        # single line configuration
        self.setLineWrapMode(QtWidgets.QTextEdit.NoWrap)
        self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.setFixedHeight(
            self.document().documentLayout().documentSize().height()
            + self.height()
            - self.viewport().height()
        )

    def keyPressEvent(self, event):
        if event.key() in (QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter):
            self.returnPressed.emit()
            return
        super().keyPressEvent(event)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = QtWidgets.QWidget()

    textedit = LineEdit()

    textedit.setHtml("""This is a <u>parragraph</u> :-)""")

    lay = QtWidgets.QVBoxLayout(w)
    lay.addWidget(textedit)
    lay.addStretch()
    w.show()
    sys.exit(app.exec_())

输出:

在此处输入图像描述


推荐阅读