Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Как отличить programmatic от user currentIndexChanged на QComboBox [RSS Feed]

#1 Март 26, 2010 13:38:24

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отличить programmatic от user currentIndexChanged на QComboBox

День добрый!

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_()



Офлайн

#2 Март 26, 2010 16:02:28

villager
От:
Зарегистрирован: 2008-11-04
Сообщения: 111
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отличить programmatic от user currentIndexChanged на QComboBox

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.



Офлайн

#3 Март 26, 2010 16:21:36

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отличить programmatic от user currentIndexChanged на QComboBox

“Семён Семёныч!” =)



Офлайн

  • Начало
  • » GUI
  • » Как отличить programmatic от user currentIndexChanged на QComboBox[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version