QPlainTextEdit имеет значение RightToLeft, но отображает LeftToRight - PullRequest
0 голосов
/ 16 апреля 2019

Я сделал вид с QPlainTextEdit и установил setLayoutDirection(QtCore.Qt.RightToLeft). Вывод self.plaintxt.isRightToLeft() равен 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_())

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

QWidget.setLayoutDirection больше не влияет на направление расположения текста (Qt.LeftToRight или Qt.RightToLeft) QTextEdit, QLineEdit и виджетов на их основе.

Чтобы программно форсировать направление текста, вы можете изменить defaultTextOption QTextDocument, связанного с этим виджетом, с новым QTextOption с другим свойством textDirection.

QTextDocument * QPlainTextEdit :: document () const

Возвращает указатель на базовый документ.

void QTextDocument :: setDefaultTextOption (const QTextOption & option)

Устанавливает для параметра текста по умолчанию значение.

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

enter image description here

0 голосов
/ 16 июня 2019

Не используйте QPlainText, поскольку он использует внутренне QPlainTextDocumentLayout, который не полностью поддерживает RTL (например, автоматическое выравнивание - как вы ищете). Вы можете использовать QTextEdit или использовать другой класс макета документа (например, QTextDocumentLayout) в вашем QPlainText.

Причина существования этих Plain классов заключается в том, чтобы быстрее убирать функции ... которые вам нужны.

...