Python 自动聚焦显示删除QLineEdit的占位符文本

Python 自动聚焦显示删除QLineEdit的占位符文本,python,qt,pyqt,focus,qlineedit,Python,Qt,Pyqt,Focus,Qlineedit,我使用PyQt4和Python 2.7.9 我的程序包含几个QLineEdit对象。问题是当程序启动时,其中一个QLineEdits会自动聚焦,这会导致我的占位符文本消失 有没有办法阻止它,或者至少不要让它隐藏占位符文本?您可以使用它将焦点放在不同的小部件上(不过,根据您选择的小部件,您可能还需要设置第一个): 或者,如果使用Qt Designer创建GUI,则可以使行编辑不是链中的第一个。这也可以使用编程方式完成。另一种方法是 self.this_widget.clearFocus() 在窗

我使用PyQt4和Python 2.7.9

我的程序包含几个
QLineEdit
对象。问题是当程序启动时,其中一个
QLineEdits
会自动聚焦,这会导致我的占位符文本消失

有没有办法阻止它,或者至少不要让它隐藏占位符文本?

您可以使用它将焦点放在不同的小部件上(不过,根据您选择的小部件,您可能还需要设置第一个):

或者,如果使用Qt Designer创建GUI,则可以使行编辑不是链中的第一个。这也可以使用编程方式完成。

另一种方法是

self.this_widget.clearFocus()

在窗口显示之后。仅在Qt5中,占位符文本即使有焦点也会显示。因此,或许可以切换到PyQt5。

谢谢!我使用Qt Designer创建了GUI,所以我更改了选项卡顺序,它按预期工作。另外还有一个用于
clearFocus
和Qt5中不同的焦点行为。但是,我不明白为什么您认为
text()
应该返回占位符文本:它在Qt-5.4中不这样做,如果它这样做,那将是一个严重的错误。但是在任何情况下,在极少数情况下,您可能需要这种行为,您可以轻松地执行
text=widget.text()或widget.placeholder text()
@ekhumaro谢谢您的评论。我想我在这里对text()的行为犯了一个错误。这是我记得的,但显然是错的。更重要的是,我想要这种行为,因为我喜欢占位符作为默认值的形式,而您的
text()或占位符text()
可以优雅地解决它。你的Qt知识真的很棒。在过去的几天里,我不得不经常提高投票率顺便说一句,不幸的是,Qt5即使在有焦点的情况下也保留了占位符文本。过去几年我看到的每一个UI设计指南都清楚地表明,在焦点上,提示应该消失,很容易认为框中有值,或者框是只读的。@scholli观察得很好。这里的问题是一个组件自动聚焦。因此,真正的解决方案可能是,当一个小部件变得可见时,Qt中没有任何组件被关注。应该可以在不聚焦输入的情况下显示并将某些内容带到前台。我昨天正在研究修复此问题,不幸的是,我的代码将在Qt5不可用的环境中运行(Houdini、Nuke等)。最后,我对QLeNeWIT进行了子类化,覆盖了PruteTeVE方法,并重新实现了基于C++源代码()的占位符渲染。这是相当直接的,它似乎坚持了下来。至于Qt5何时可用,我的代码直接使用QLineEdit。
self.this_widget.clearFocus()