如何将 setPlaceholderText 包装在 QPlainTextEdit 字段中?

Posted

技术标签:

【中文标题】如何将 setPlaceholderText 包装在 QPlainTextEdit 字段中?【英文标题】:How can I wrap the setPlaceholderText in a QPlainTextEdit field? 【发布时间】:2020-07-13 17:50:39 【问题描述】:

我在QPlainTextEdit 字段中有一个有点长的占位符文本,但它不会环绕。即使我将setWordWrapMode attr 设置为WordWrap。有什么方法可以实现吗?

这是我在 Maya (2018) 中获得的屏幕截图:

文本应为Comment on what you have done here, i.e.: what changes were made or new clothing...,但在“是”之后被截断。你有点看到字母的尖端,但就是这样。

以下代码在 Maya 中不起作用:

import sys
from PySide2 import QtCore
from PySide2 import QtWidgets


class TestDialog(QtWidgets.QWidget):

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

        self.setWindowTitle("testing")

        self.create_widgets()
        self.create_layout()

    def create_widgets(self):
        self.notes_ql = QtWidgets.QLabel()
        self.notes_ql.setText('Notes: ')
        self.notes_ql.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop)
        self.notes_pt = QtWidgets.QPlainTextEdit()
        self.notes_pt.setFixedHeight(100)
        self.notes_pt.setLineWrapMode(QtWidgets.QPlainTextEdit.WidgetWidth)
        self.notes_pt.verticalScrollBar().setValue(self.notes_pt.verticalScrollBar().minimum())
        self.notes_pt.setPlaceholderText('Comment on what you have done here, i.e.: what changes were made or new clothing...')


    def create_layout(self):
        notes_layout = QtWidgets.QHBoxLayout()
        notes_layout.addWidget(self.notes_ql)
        notes_layout.addWidget(self.notes_pt)

        main_layout = QtWidgets.QHBoxLayout(self)
        main_layout.setSpacing(1)
        main_layout.setContentsMargins(6, 6, 6, 6)
        main_layout.addLayout(notes_layout)


if __name__ == '__main__':
    try:
        test_dialog.close()  # pylint: disable=E0601
        test_dialog.deleteLater()
    except:
        pass

    test_dialog = TestDialog()
    test_dialog.show()
 

用下面的代码 sn-p 替换 if __name__ 语句,使其作为独立应用程序运行:

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = TestDialog()
    window.show()
    app.exec_()

【问题讨论】:

请提供minimal reproducible example。你的代码没有重现问题,因为使用它我得到i.imgur.com/oElXaVD.png @eyllanesc 添加了代码 sn-p。 【参考方案1】:

该代码适用于 Maya 2020,但不适用于 2019 或 2018。我的猜测是 Qt 5.6 (2018/2019) 或 Maya 的 PySide2 包中存在一个错误,该错误已在 Qt 5.12 (2020) 中修复。

不幸的是,这意味着早期版本可能没有简单的修复方法。

【讨论】:

以上是关于如何将 setPlaceholderText 包装在 QPlainTextEdit 字段中?的主要内容,如果未能解决你的问题,请参考以下文章

qt5 中登录界面

如何将某些属性从包装值“提升”到包装器?

XSLT 如何将常用标签包装在不同的包装元素中?

如何将 FormWizard 包装在视图中?

如何将 _app.js 包装在多个提供程序中?

如何将 golang 错误包装成不透明错误?