QPlainTextEdit是RightToLeft但显示LeftToRight

问题描述 投票:0回答:2

我用QPlainTextEdit制作了一个视图并设置了setLayoutDirection(QtCore.Qt.RightToLeft)self.plaintxt.isRightToLeft()is 1的输出,但在纯文本视图中,波斯语和英语文本从左侧显示。我的代码会发生什么?

码:

import sys, re

from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QLabel, QLineEdit, QMainWindow, QPushButton, QFileSystemModel, QTreeView, \
    QFileDialog, QComboBox, QPlainTextEdit
from PyQt5.QtCore import pyqtSlot


class App(QMainWindow):

    def __init__(self):
        super(App, self).__init__()

        self.title = 'by PyQt5 and python 3.7'
        self.left = 10
        self.top = 10
        self.width = 1000
        self.height = 500

        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.btn_browse = QPushButton('Browse', self)
        self.btn_browse.move(50, 20)
        self.btn_browse.clicked.connect(self.on_click)

        self.textbox = QLineEdit(self)
        self.textbox.move(170, 20)
        self.textbox.resize(280, 40)
        self.textbox.setAlignment(QtCore.Qt.AlignRight) # It is in right.

        self.page_view = QPlainTextEdit(self)
        self.page_view.move(20, 100)
        self.page_view.resize(800, 400)
        self.page_view.setLayoutDirection(QtCore.Qt.RightToLeft) # It is not in right.

        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())
python pyqt5 python-3.7 right-to-left qplaintextedit
2个回答
1
投票

QWidget.setLayoutDirection不再影响QTextEdit,QLineEdit和基于它们的小部件的文本布局方向(Qt.LeftToRight或Qt.RightToLeft)。

若要以编程方式强制文本方向,您可以使用不同textDirection属性的新QTextOption更改与该窗口小部件关联的QTextDocument的defaultTextOption。

QTextDocument * QPlainTextEdit :: document()const

返回指向基础文档的指针。

void QTextDocument :: setDefaultTextOption(const QTextOption&option)

将默认文本选项设置为选项。

self.page_view.document().setDefaultTextOption(QTextOption(Qt.AlignRight))

enter image description here


0
投票

不要使用QPlainText,因为它使用内部QPlainTextDocumentLayout,它不完全支持RTL(例如自动对齐 - 就像你正在寻找的那样)。您可以使用QTextEdit,或在QTextDocumentLayout中使用不同的文档布局类(如QPlainText)。

存在这些Plain类的原因是通过删除所需的功能来加快速度。

© www.soinside.com 2019 - 2024. All rights reserved.