用在 QPlainTextEdit 小部件中插入四个空格替换所有制表符操作

Replace all tab operations with inserting four spaces in QPlainTextEdit widget

我有一个 QPlainTextEdit 对象,我在我的一个工具中将其用作迷你 python 编辑器。问题是,当您在 QPlainTextEdit 中插入一个制表符时,它会插入一个很大的制表符,而不是像我希望的那样插入四个空格。

有没有办法覆盖此功能,就像在 Notepad++ 等程序中一样?

使用 setTabStopWidth(width) 方法更改 space 一个选项卡占用的大小。它需要以像素为单位的宽度。默认值为 80。

如果需要用四个space替换所有的tab,可以从qtextedit中获取字符串然后替换

s= text_edit.toPlainText()
s= s.replace('\t', '    ')

更改 QTextEdit 中的制表符宽度:

from PyQt5.QtWidgets import *
import sys

class Wind(QWidget):
    def __init__(self):
        super().__init__()
        self.setupUI()

    def setupUI(self):
        self.setGeometry(300,300, 300,500)
        self.show()

        vb_layout= QVBoxLayout(self)

        text_edit= QTextEdit(self)

        # This method sets tab width in pixels
        text_edit.setTabStopWidth(8)

        vb_layout.addWidget(text_edit)
        self.setLayout(vb_layout)

def main():
    app= QApplication(sys.argv)
    w = Wind()
    exit(app.exec_())


if __name__ == '__main__':
    main()

我知道这个问题大约三岁了但是。我刚刚遇到了类似的问题。如果您想用空格替换制表符,您可以覆盖 keyPressEvent 函数并创建一个包含空格而不是制表符的新事件。

 def keyPressEvent (self, oEvent):
    if oEvent.key () == Qt.Key_Tab:
        oEvent = QKeyEvent (QEvent.KeyPress
            , Qt.Key_Space
            , Qt.KeyboardModifiers(oEvent.nativeModifiers())
            , "    ")
    super().keyPressEvent (oEvent)