Текст заполнителя не отображается (pyside/pyqt)
изучая 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/
и не смотри, что я делаю по-другому.
1 ответов
как ваш виджет содержит только один компонент (QLineEdit
), этот компонент всегда будет захватывать фокус изначально. Текст-заполнитель только если редактирование пусто и не имеет фокуса*.
простым решением было бы сфокусировать другой компонент для показа вашего виджета, например
при вставке 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.