2016-08-30 7 views
1

Код ниже создает QComboBox и QPushButton, оба назначенные для того же макета. Combobox настроен на редактирование, чтобы пользователь мог ввести новое значение элемента combobox. Если пользователь нажимает Вкладка Клавиша клавиатуры (вместо Enter) Новое значение не будет добавлено в ComboBox. Вопрос: Как убедиться, что элементы ComboBox обновлены с помощью нового значения, даже если пользователь покидает ComboBox с помощью Tab ключ?Когда QComboBox установлен редактируемым

enter image description here

from PyQt4 import QtGui 

def comboActivated(arg=None): 
    print '\n ...comboActivated: %s'%arg 

widget = QtGui.QWidget() 
layout = QtGui.QVBoxLayout() 
widget.setLayout(layout) 
combo = QtGui.QComboBox() 
combo.setEditable(True) 
combo.addItems(['One','Two','Three']) 
combo.activated.connect(comboActivated) 
layout.addWidget(combo) 
layout.addWidget(QtGui.QPushButton('Push')) 
widget.show() 

ответ

1

Когда пользователь редактирует текст в поле, то editTextChanged() сигнал излучается с редактируемого текста в качестве аргумента. Кроме того, когда сам виджет теряет фокус, как когда пользователь набирает Tab, чтобы перейти к кнопке, виджет выдает сигнал focusOutEvent(). Аргументом для этого сигнала является QFocusEvent, на который вы можете запросить причину, по которой фокус был утерян. Метод события reason() возвращает Qt.TabFocusReason, например, если пользователь нажал кнопку Tab, чтобы оставить виджет.

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

Вы также можете ознакомиться с классом QValidator и его подклассами, которые вы прикрепляете к виджетам с редактируемым текстом и определяете типы допустимых входных данных для виджета (например, целые числа, текст и т. Д.). Это лучший и самый простой способ проверить ввод пользователя для редактируемых виджетов.

+0

Спасибо! 'editTextChanged()' в этом случае достаточно! – alphanumeric