【发布时间】:2014-12-19 22:25:31
【问题描述】:
我使用 PyQt4 和 Python 2.7.9。
我的程序包含一些QLineEdit 对象。问题是当程序启动时,QLineEdits 之一被自动聚焦,这导致我的占位符文本消失。
有什么办法阻止它,或者至少不要让它隐藏占位符文本?
【问题讨论】:
标签: python qt pyqt focus qlineedit
我使用 PyQt4 和 Python 2.7.9。
我的程序包含一些QLineEdit 对象。问题是当程序启动时,QLineEdits 之一被自动聚焦,这导致我的占位符文本消失。
有什么办法阻止它,或者至少不要让它隐藏占位符文本?
【问题讨论】:
标签: python qt pyqt focus qlineedit
另一种方法是
self.this_widget.clearFocus()
窗口显示后。只有在 Qt5 中,即使有焦点也会显示占位符文本。所以也许切换到 PyQt5。
【讨论】:
clearFocus 和 Qt5 中不同的焦点行为。但是,我不明白您为什么认为 text() 应该返回占位符文本:它在 Qt-5.4 中没有这样做,如果这样做,那将是一个令人讨厌的错误。但无论如何,在极少数情况下您可能想要这种行为,您可以轻松地做到text = widget.text() or widget.placeholderText()。
text() or placeholderText() 优雅地解决了它。你的 Qt 知识真的很棒。在过去的几天里,我不得不经常投票。 ;)
您可以使用setFocus 将焦点放在不同的小部件上(不过,根据您选择的小部件,您可能还需要先设置focus-policy):
self.some_other_widget.setFocusPolicy(QtCore.Qt.TabFocus)
self.some_other_widget.setFocus()
或者,如果您使用 Qt Designer 创建 GUI,您可以 edit the tab-order 以便行编辑不是链中的第一个。这也可以使用QWidget.setTabOrder 以编程方式完成。
【讨论】: