当QComboBox设置为可编辑时

时间:2016-08-30 19:31:50

标签: python pyqt pyside qcombobox

下面的代码创建了分配给相同布局的QComboBox和QPushButton。 Combobox设置为可编辑,因此用户可以键入新的组合框项目的值。 如果用户点击 Tab 键盘键(而不是Enter键),新值将不会添加到ComboBox。 问题:即使用户使用 Tab 键离开ComboBox,如何确保使用新值更新ComboBox的项目?

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 个答案:

答案 0 :(得分:1)

当用户编辑框中的文本时,将发送editTextChanged()信号,并将编辑后的文本作为参数。此外,当窗口小部件本身失去焦点时,就像用户键入Tab移动到按钮一样,窗口小部件会发出focusOutEvent()信号。此信号的参数是QFocusEvent,您可以查询焦点丢失的原因。例如,如果用户点击reason()按钮离开小部件,则事件的Qt.TabFocusReason方法将返回Tab

您可以将插槽连接到这些信号中的任何一个(或两个),这样当用户在编辑文本后离开窗口小部件时,您可以处理它并将其添加到框的值列表中。

您可能还想查看QValidator类及其子类,您可以使用可编辑文本附加到窗口小部件,并定义窗口小部件的有效输入类型(例如,整数,文本等) 。这是验证用户对可编辑小部件的输入的最佳和最简单的方法。