Найти - Пользователи
Полная версия: Как отличить programmatic от user currentIndexChanged на QComboBox
Начало » GUI » Как отличить programmatic от user currentIndexChanged на QComboBox
1
Studentik
День добрый!

PyQt 4.7, Python 3.1

Есть комбобокс, который нужно программно заполнять и совершать действия при выборе позиции пользователем . Но во время программного заполнения, сигнал currentIndexChanged запускается и при добавлении первой позиции (это не документировано?), и при программной смене позиции на нужную (это документировано). Как в обработчике отличить пользовательское изменение значения от программного заполнения или как правильно заполнять, чтобы не сигналить?

Спасибо!

Вот пример:

from PyQt4 import Qt as qt
import sys

def cbIndexChanged(index):
txt.insertPlainText("Index changed to {} - it must be printed only when user changes values, not programmatic change! How?\n\n".format(index))

def btnFillClicked(checked):
cb.clear()
txt.clear()
cb.addItem("First Item")
cb.addItem("Second Item")
cb.addItem("Third Item")
cb.setCurrentIndex(1)

app = qt.QApplication(sys.argv)
mw = qt.QMainWindow()
fr = qt.QFrame()

cb = qt.QComboBox()
txt = qt.QTextEdit()
btnFill = qt.QPushButton("Fill QComboBox")

cb.currentIndexChanged.connect(cbIndexChanged)
btnFill.clicked.connect(btnFillClicked)

fr.setLayout(qt.QVBoxLayout())
fr.layout().addWidget(cb)
fr.layout().addWidget(txt)
fr.layout().addWidget(btnFill)
mw.setCentralWidget(fr)
mw.show()

res = app.exec_()
villager
There are two signals emitted if the current item of a combobox changes, currentIndexChanged() and activated(). currentIndexChanged() is always emitted regardless if the change was done programmatically or by user interaction, while activated() is only emitted when the change is caused by user interaction.
Studentik
“Семён Семёныч!” =)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB