【问题标题】:When QComboBox is set editable当 QComboBox 设置为可编辑时
【发布时间】:2017-01-07 05:20:12
【问题描述】:

下面的代码创建 QComboBox 和 QPushButton 都分配给相同的布局。组合框设置为可编辑,因此用户可以键入新的组合框项的值。 如果用户点击 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()

【问题讨论】:

    标签: python pyqt pyside qcombobox


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢! editTextChanged() 在这种情况下就足够了!
    猜你喜欢
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多