El texto del marcador de posición no se muestra (pyside / pyqt)

Aprendiendo PySide, estoy ajustando un widget de edición de texto (QLineEdit) y tratando de establecer el texto del marcador de posición usando setPlaceHolderText como se muestra en el fragmento de código a continuación (que invoco desde main ). Desafortunadamente, no está funcionando como esperaba. El código se ejecuta, pero el cuadro de texto está en blanco, no muestra el texto del marcador de posición. Estoy en Windows 7, Python 2.7 (trabajando en 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() 

¿Alguien entiende lo que estoy haciendo mal? Estoy siguiendo ejemplos de los siguientes sitios:

http://nullege.com/codes/search/PyQt4.QtGui.QLineEdit.setPlaceholderText

http://www.pythoncentral.io/pysidepyqt-tutorial-interactive-widgets-and-layout-containers/

Y no veo lo que estoy haciendo diferente.

Como su widget solo contiene un componente (el QLineEdit ), ese componente siempre capturará el foco inicialmente. El texto del marcador de posición solo se muestra si la edición está vacía y no tiene el foco *.

Una solución simple sería enfocar un componente diferente antes de mostrar su widget, por ejemplo, insertando self.setFocus() antes de self.show() .
El inconveniente es que de esta manera el usuario tiene que hacer clic en el campo de texto o presionar Tab antes de poder escribir en el campo. Para evitar eso, puede interceptar el evento keyPress en el widget.

Ejemplo:

 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) 

* Nota: Esto ha cambiado en Qt5, donde se muestra el texto del marcador de ritmo siempre que la edición de la línea esté vacía. Lamentablemente, PySide no es compatible con Qt5 (todavía), por lo que tendrías que usar PyQt5.