2016-08-30 57 views
1

下面的代碼創建QComboBox和QPushButton,它們都被分配到相同的佈局。 Combobox設置爲可編輯的,因此用戶可以鍵入新的組合框項目的值。 如果用戶點擊標籤鍵盤鍵(而不是輸入),新值將不會被添加到ComboBox。 問:如何確保組合框的項目與新值,即使用戶離開與標籤鍵組合框更新?當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,您可以查詢焦點丟失的原因。例如,如果用戶點擊Tab按鈕離開小部件,則該事件的reason()方法將返回Qt.TabFocusReason

您可以將縫隙連接至任一(或兩者)這些信號的,這樣當用戶編輯文本後離開小部件,處理它,並把它添加到值框列表。

您可能還想查看QValidator類及其子類,它們附加到帶有可編輯文本的小部件,並定義小部件的有效輸入類型(例如,整數,文本等)。這是驗證用戶對可編輯小部件的輸入的最好和最簡單的方法。

+0

謝謝!在這種情況下'editTextChanged()'就足夠了! – alphanumeric

相關問題