如何在QPlainTextEdit中更改选项卡的宽度

Nix*_*xel 4 indentation python-3.x qplaintextedit pyqt5

在PyQt5中使用QPlaintextEdit时,如果按Tab键盘上的按钮,将得到一个等于六个空格大小的制表符空格。但我希望它是四个空格的大小,以便在使用时:

TextEdit.setPlainTextEdit('\t')
Run Code Online (Sandbox Code Playgroud)

我应该缩进制表符空格,该空格一共只要四个空格。

我尝试使用四个空格代替制表符空格,但是随着代码变得越来越冗长,事情变得复杂了。

ekh*_*oro 6

可以使用setTabStopDistance设置选项卡的宽度。这需要一个浮点值,可以使用QFontMetricsF类进行计算:

textedit = QtWidgets.QPlainTextEdit()
textedit.setTabStopDistance(
    QtGui.QFontMetricsF(textedit.font()).width(' ') * 4)
Run Code Online (Sandbox Code Playgroud)

但是,此方法仅在Qt-5.10中引入,因此对于Qt4和较旧版本的Qt5,必须使用setTabStopWidth(现已记录为过时的):

textedit = QtWidgets.QPlainTextEdit()
textedit.setTabStopWidth(textedit.fontMetrics().width(' ') * 4)
Run Code Online (Sandbox Code Playgroud)

此方法的最大缺点是仅采用数值。这意味着不能保证使用非整数字符宽度的字体(例如DejaVu字体和许多其他字体)都能得到准确的结果。

  • 如今 `QFontMetrics::width()` 已被弃用(我相信是从 Qt-5.11 开始)。建议从现在开始使用`QFontMetricsF::horizo​​ntalAdvance()`。 (2认同)