2014-06-17 2 views
5

PySide를 배우면서 텍스트 편집 위젯 (QLineEdit)을 조정하고 setPlaceHolderText를 사용하여 자리 표시 자 텍스트를 설정하려고합니다. 아래 코드 스 니펫 (main에서 호출)입니다. 불행히도, 예상대로 작동하지 않습니다. 코드가 실행되지만 텍스트 상자가 비어 있고 자리 표시 자 텍스트가 표시되지 않습니다. 필자는 Windows 7, Python 2.7 (iPython에서 작업 중)입니다.자리 표시 자 텍스트가 표시되지 않습니다. (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()   

누구나 내가 잘못하고있는 것을 이해하고 있습니까?

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

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

을 내가 다르게 뭘하는지 볼 수 없습니다 : 나는 다음 사이트에서 예제를 따라하고 있습니다.

답변

11

위젯에는 하나의 구성 요소 (QLineEdit) 만 포함되므로 해당 구성 요소는 항상 처음에 포커스를 가져옵니다. 편집자가 비어 있으면 자리 표시 자 텍스트는 only shown이고 에 포커스가 없습니다 *.

간단한 해결책은 위젯을 보여주는 다른 구성 요소를 집중시키는 것입니다. self.show() 앞에 self.setFocus()을 삽입하여
단점은 사용자가 텍스트 필드를 클릭하거나 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) 

* 참고 : paceholder 텍스트가 한 라인 편집이 비어로 표시되는 경우이 Qt5 변경되었습니다. 불행히도 PySide는 (아직) Qt5를 지원하지 않으므로 PyQt5를 사용해야합니다.

+1

명쾌하고 도움이되는 답변에 감사드립니다. – neuronet