QPlainTextEdit 是 RightToLeft 但显示 LeftToRight
QPlainTextEdit is RightToLeft but displays LeftToRight
我用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_())
QWidget.setLayoutDirection不再影响QTextEdit、QLineEdit和基于它们的小部件的文本布局方向(Qt.LeftToRight或Qt.RightToLeft)。
要以编程方式强制文本方向,您可以使用不同 textDirection 属性. [=13] 的新 QTextOption 更改与该小部件关联的 QTextDocument 的 defaultTextOption =]
QTextDocument *QPlainTextEdit::document() const
Returns a pointer to
the underlying document.
void QTextDocument::setDefaultTextOption(const QTextOption &option)
Sets the default text option to option.
self.page_view.document().setDefaultTextOption(QTextOption(Qt.AlignRight))
不要使用 QPlainText
,因为它在内部使用 QPlainTextDocumentLayout
,不完全支持 RTL(例如自动对齐 - 就像您正在寻找的那样)。您可以在 QPlainText
.
中使用 QTextEdit
,或使用不同的文档布局 class(如 QTextDocumentLayout
)
存在这些 Plain
class 的原因是通过删除您需要的功能来加快速度。
我用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_())
QWidget.setLayoutDirection不再影响QTextEdit、QLineEdit和基于它们的小部件的文本布局方向(Qt.LeftToRight或Qt.RightToLeft)。
要以编程方式强制文本方向,您可以使用不同 textDirection 属性. [=13] 的新 QTextOption 更改与该小部件关联的 QTextDocument 的 defaultTextOption =]
QTextDocument *QPlainTextEdit::document() const
Returns a pointer to the underlying document.
void QTextDocument::setDefaultTextOption(const QTextOption &option)
Sets the default text option to option.
self.page_view.document().setDefaultTextOption(QTextOption(Qt.AlignRight))
不要使用 QPlainText
,因为它在内部使用 QPlainTextDocumentLayout
,不完全支持 RTL(例如自动对齐 - 就像您正在寻找的那样)。您可以在 QPlainText
.
QTextEdit
,或使用不同的文档布局 class(如 QTextDocumentLayout
)
存在这些 Plain
class 的原因是通过删除您需要的功能来加快速度。