2014-06-17 52 views
5

Öğrenme PySide, bir metin düzenleme widget'ını (QLineEdit) değiştiriyorum ve setPlaceHolderText kullanarak aşağıdaki kod snippet'inde olduğu gibi (main dan çağırdığım) yer tutucu metnini ayarlamaya çalışıyorum. Ne yazık ki beklediğim gibi çalışmıyor. Kod çalışır, ancak metin kutusu boştur, yer tutucu metni göstermez. Windows 7, Python 2.7'de (iPython'da çalışıyor) çalışıyorum.Yer tutucu metni gösterilmiyor (pyside/pyqt)

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()   

Yanlış yaptığımı anlayan herkes var mı?

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

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

Ve ben farklı yapıyorum görmüyorum: Ben şu sitelerden örnekler takip ediyorum.

cevap

11

Widget'ınız yalnızca bir bileşen (QLineEdit) içerdiğinden, bu bileşen her zaman önce odağı yakalayacaktır. Düzenleme boşsa ve , odağına sahip değilse, yer tutucu metni only shown'dur *.

Basit bir çözüm, widget'ınızı gösteren farklı bir bileşene odaklanmak olabilir. self.show()'dan önce self.setFocus() ekleyerek .
Buradaki olumsuzluk, kullanıcının bu alana metin alanına tıklamak zorunda kalması veya alana yazabilmesi için Tab tuşlarına basmasıdır. Bunu önlemek için, widget'ta keyPress olayını durdurabilirsiniz.

Örnek:

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) 

* Not: paceholder metin sürece hat düzenleme boş olarak gösterilen burada Qt5 değişti. Ne yazık ki PySide Qt5'i desteklemiyor (henüz), bu yüzden PyQt5'i kullanmalısınız.

+1

Bu berrak ve yardımcı yanıt için çok teşekkürler. – neuronet