我已经为我的项目创建了一个gui,我需要为一个QPlainText使用占位符文本(我使用qt设计器创建gui并生成抛出的pyside代码),这有点乏味,但我现在就是这样滚动的。我有一个问题,尽管占位符-它不会显示在纯文本上,除非im写作,然后删除。我需要它在任何时候显示,除非占位符被点击或标签到。我在网上找到了一些解决方案,但我看到的答案中,似乎没有一个对me.most有效,但我没有完全理解这个想法,甚至当我试图将焦点设置为清晰或其他对象时,它们也没有在我的整个gui上工作。此外,我需要从qt设计器本身解决这个问题,或者抛出主类im使用-因im,每次更改gui并生成一个新的gui,所以gui中的代码更改不会进一步应用。
我添加了下面的代码,作为我的项目中使用的纯文本im的最小示例。我知道,如果im生成的代码在最近更改占位符后抛出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发布于 2021-09-03 21:06:15
它似乎是一个Qt错误,因为我也在Qt5和Qt6中复制它。
解释:
在私有Qt中,有一个函数可以重新计算placeHolderText是否可见,并且当文本发生变化时会调用它,但是当设置placeHolder导致意外行为时,它不会被重新计算。
解决办法
一个可能的解决方案是删除self.shifted_text_encode.setPlainText("")或在self.shifted_text_encode.setPlaceholderText(...)之后使用self.shifted_text_encode.clear()。
我刚报告了窃听器QTBUG-96212
https://stackoverflow.com/questions/69050400
复制相似问题