下面的代码创建了分配给相同布局的QComboBox和QPushButton。 Combobox设置为可编辑,因此用户可以键入新的组合框项目的值。 如果用户点击 Tab 键盘键(而不是Enter键),新值将不会添加到ComboBox。 问题:即使用户使用 Tab 键离开ComboBox,如何确保使用新值更新ComboBox的项目?
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()
答案 0 :(得分:1)
当用户编辑框中的文本时,将发送editTextChanged()
信号,并将编辑后的文本作为参数。此外,当窗口小部件本身失去焦点时,就像用户键入Tab
移动到按钮一样,窗口小部件会发出focusOutEvent()
信号。此信号的参数是QFocusEvent
,您可以查询焦点丢失的原因。例如,如果用户点击reason()
按钮离开小部件,则事件的Qt.TabFocusReason
方法将返回Tab
。
您可以将插槽连接到这些信号中的任何一个(或两个),这样当用户在编辑文本后离开窗口小部件时,您可以处理它并将其添加到框的值列表中。
您可能还想查看QValidator
类及其子类,您可以使用可编辑文本附加到窗口小部件,并定义窗口小部件的有效输入类型(例如,整数,文本等) 。这是验证用户对可编辑小部件的输入的最佳和最简单的方法。