Если вы хотите продолжать звонить в том же диалоговом окне, пока пользователь не отменяет, сохраняя список всех вариантов, вы просто делаете это с помощью цикла. Итак, вместо этого:
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
... сделайте это:
progamming_languages = []
while True:
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
if not ok:
break
programming_languages.append(progamming_language)
Пока мы на нем, вы действительно должны проверять ok
вместо игнорируя его во всех других случаях. В конце концов, пользователь нажимает Cancel
вместо ввода имени при запросе имени, действительно ли вы хотите задавать вопросы и в итоге создать нового сотрудника с пустым именем?
Кроме того, ваш код будет намного более читабельным, если вы не запустите свои висячие отступы, уже выходящие из края экрана. Например, вместо этого:
programing_language, ok = QtGui.QInputDialog.getItem(self, "Add Developer",
"list of languages", items, 0, False)
... сделайте это:
programing_language, ok = QtGui.QInputDialog.getItem(
self, "Add Developer", "list of languages", items, 0, False)
... или, возможно, даже это:
programing_language, ok = QtGui.QInputDialog.getItem(
self, "Add Developer", "list of languages", items, 0, False
)
Или, даже лучше, получите автоформаттеры, такие как black
или yapf
, и настройте его для автоматического форматирования вашего кода при каждом сохранении, чтобы вам не приходилось думать о таких вещах.
На выходном канале есть два подписчика - привязка канала (в связывателе) и ваш маршрутизатор.
В течение DirectChannel
с алгоритмом диспетчеризации по умолчанию является циклический перебор, поэтому вы поочередно отправляете сообщения на маршрутизатор и напрямую в подшивку.
Вам нужен другой DirectChannel
@Bean
для активатора службы, чтобы все сообщения отправлялись туда, а затем в подшивку после маршрутизации.
См. sourceChannel
в этом образце.