2014-12-19 2 views
2

Я использую PyQt4 и Python 2.7.9.Автоматическая фокусировка на показе удаляет текст-заполнитель QLineEdit

Моя программа содержит несколько объектов QLineEdit. Проблема в том, что при запуске программы один из QLineEdits сфокусирован автоматически, что приводит к исчезновению текста моего заполнителя.

Есть ли способ предотвратить это или, по крайней мере, не позволяет ему скрывать текст заполнителя?

ответ

1

Вы можете использовать setFocus поставить фокус на другой виджет (хотя, в зависимости от виджета вы выбираете, вы, возможно, потребуется установить focus-policy первый):

self.some_other_widget.setFocusPolicy(QtCore.Qt.TabFocus) 
    self.some_other_widget.setFocus() 

В качестве альтернативы, если вы используете Qt Дизайнер для создания графического интерфейса, вы могли бы edit the tab-order, так что редактирование строк не является первым в цепочке. Это также можно сделать программно, используя QWidget.setTabOrder.

+0

Спасибо! Я создал графический интерфейс с помощью Qt Designer, поэтому я изменил порядок вкладок и работает так, как ожидалось. – ohad987

2

Другой способ

self.this_widget.clearFocus() 

после окно было показано на рисунке. Только в Qt5 тексты-заполнители отображаются даже с фокусом. Так что, возможно, переключитесь на PyQt5.

+1

Плюс один для 'clearFocus' и другое поведение фокуса в Qt5. Однако я не понимаю, почему вы думаете, что 'text()' должен возвращать текст заполнителя: он не делает этого в Qt-5.4, и это было бы неприятной ошибкой, если бы это произошло. Но в любом случае, в редких случаях, когда вам может понадобиться такое поведение, вы можете легко выполнить 'text = widget.text() или widget.placeholderText()'. – ekhumoro

+0

@ekhumoro Спасибо за комментарий. Я думаю, что я сделал ошибку здесь с поведением text(). Это то, что я вспомнил, но, очевидно, неправильно. Более того, я хотел этого поведения, потому что мне нравились заполнители как форма дефолтов, и ваш 'text() или placeholderText()' решает его элегантно. Ваше знание Qt действительно превосходно. В последние дни мне приходилось часто его распространять. ;) – Trilarion

+1

В стороне, к сожалению, Qt5 сохраняет текст заполнителя даже с фокусом. В каждом руководстве по дизайну пользовательского интерфейса, который я видел, который находится за последние пару лет, ясно, что в фокусе намек должен исчезнуть, легко понять, что в коробке есть значение, или поле доступно только для чтения. – Schollii

Смежные вопросы