【问题标题】:Pyside PlainText placeholder text not showingPyside PlainText 占位符文本未显示
【发布时间】:2021-11-02 02:50:48
【问题描述】:

我为我的项目创建了一个 gui,我需要为 QPlainText 使用占位符文本。(我使用 qt 设计器创建 gui 并生成代码抛出 pyside)它有点乏味,但这就是我现在的滚动方式。我有一个占位符的问题 - 它不会显示在纯文本中,除非我在写然后删除。我需要它一直显示,除非占位符被点击或标签。我在网上找到了一些解决方案,但似乎没有一个对我有用。我看到的大多数答案都使用焦点功能,但我不太明白,即使我尝试将焦点设置为清除,它们也不能在我的整个 gui 上工作或其他对象。此外,我需要从 qt 设计器本身解决这个问题,或者使用我使用的主类 - 导致我每次都更改 gui 并生成一个新的,因此对 gui 中代码的更改不会进一步应用。

我添加了下面的代码作为我在项目中使用的明文的最小示例。而且我知道,如果我在最近对占位符进行更改后生成代码抛出 pyqt5,它将按我的意愿工作,但不幸的是我需要它在尚未更新的 pyside 中。

import sys

from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
    MainWindow.resize(480, 640)
    self.centralwidget = QWidget(MainWindow)
    self.centralwidget.setObjectName(u"centralwidget")
    self.shifted_text_encode = QPlainTextEdit(self.centralwidget)
    self.shifted_text_encode.setObjectName(u"shifted_text_encode")
    self.shifted_text_encode.setGeometry(QRect(80, 170, 311, 131))
    self.shifted_text_encode.setFocusPolicy(Qt.StrongFocus)
    self.shifted_text_encode.setTabChangesFocus(True)
    MainWindow.setCentralWidget(self.centralwidget)
    self.statusbar = QStatusBar(MainWindow)
    self.statusbar.setObjectName(u"statusbar")
    MainWindow.setStatusBar(self.statusbar)

    self.retranslateUi(MainWindow)

    QMetaObject.connectSlotsByName(MainWindow)
# setupUi

def retranslateUi(self, MainWindow):
    MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
    self.shifted_text_encode.setPlainText("")
    self.shifted_text_encode.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Enter text", None))
# retranslateUi

【问题讨论】:

    标签: python qt-designer pyside2


    【解决方案1】:

    这似乎是一个 Qt 错误,因为我也在 Qt5 和 Qt6 中重现了它。

    解释:

    在私有 Qt API 中,有一个函数可以重新评估 placeHolderText 是否可见,并且在文本更改时调用它,但在设置 placeHolder 导致意外行为时不会重新评估。

    解决方法

    一种可能的解决方案是删除self.shifted_text_encode.setPlainText("") 或在self.shifted_text_encode.setPlaceholderText(...) 之后使用self.shifted_text_encode.clear()


    我刚刚报告了错误QTBUG-96212

    【讨论】:

    • 哇!它是一个实际的错误,这很疯狂。非常感谢你。在我删除了 setplaintext 代码后,它确实有效。但是,有没有办法做到这一点,所以当我生成代码时,我不必处理删除这些行 - 这是一项凌乱的工作。而且由于 gui 每天都在变化,我不断生成新代码。有没有解决这个问题的 qt 设计师的方法?或者可能来自我的不是 ui 本身的主脚本?
    • @Ido 在主文件中调用 setupUi 后使用 self.shifted_text_encode.clear()
    • 你是个天才!我已经在我的脚本中实现了它并且它有效。非常感谢你!
    猜你喜欢
    • 2014-08-08
    • 2021-03-04
    • 1970-01-01
    • 2023-02-15
    • 2016-09-14
    • 2023-01-26
    • 2018-08-08
    • 1970-01-01
    • 2015-03-16
    相关资源
    最近更新 更多