学习PySide,我正在调整文本编辑小部件(QLineEdit)并尝试使用setPlaceHolderText设置占位符文本,如下面的代码片段(我从main
调用)。不幸的是,它没有像我预期的那样工作。代码运行,但文本框为空,不显示占位符文本。我在Windows 7,Python 2.7(在iPython中工作)。
class MyTextEdit(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.textEditor=QtGui.QLineEdit(self)
self.textEditor.move(50,15)
self.textEditor.setPlaceholderText("Don't mind me.")
self.setGeometry(100, 100, 200, 50)
self.show()
任何人都明白我做错了什么?我来自以下网站的示例:
http://nullege.com/codes/search/PyQt4.QtGui.QLineEdit.setPlaceholderText
http://www.pythoncentral.io/pyside-pyqt-tutorial-interactive-widgets-and-layout-containers/
并且不要看到我做的不同。
答案 0 :(得分:12)
由于您的窗口小部件仅包含一个组件(QLineEdit
),因此该组件始终会抓住焦点。如果修改为空且不具有焦点*,则占位符文字为only shown。
一个简单的解决方案是在显示您的小部件时关注不同的组件,例如:
在self.setFocus()
之前插入self.show()
缺点是这样用户必须单击文本字段或按 Tab 才能写入字段。为避免这种情况,您可以截取窗口小部件上的keyPress
事件。
示例:
class MyTextEdit(QtGui.QWidget):
'''Some positioning'''
def __init__(self):
QtGui.QWidget.__init__(self)
self.textEditor=QtGui.QLineEdit(self)
self.textEditor.move(50,15)
self.textEditor.setPlaceholderText("Hi I'm de fault.")
self.setGeometry(100, 100, 200, 50)
self.setFocus()
self.show()
def keyPressEvent(self, evt):
self.textEditor.setFocus()
self.textEditor.keyPressEvent(evt)
*注意:只有在行编辑为空时,Qt5中的情况发生了变化。不幸的是PySide还没有支持Qt5,所以你必须使用PyQt5。