在QPlainTextEdit小部件

时间:2017-08-25 12:00:10

标签: python qt pyqt pyside

我有一个QPlainTextEdit对象,我在其中一个工具中用作迷你python编辑器。问题是当你在QPlainTextEdit中插入一个标签时,它会插入一个很棒的大标签,而不是像我喜欢的那样插入四个空格。

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

2 个答案:

答案 0 :(得分:1)

使用setTabStopWidth(width)方法更改一个标签占用的空间。它的宽度以像素为单位。默认值为80。

如果您需要用四个空格替换所有选项卡,可以从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()

答案 1 :(得分:1)

我知道这个问题已经问了三年了,但是。我刚刚遇到了类似的问题。如果您想用空格替换制表符,您可以覆盖 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)