Весенний поток облака: динамический выходной канал странное поведение

Если вы хотите продолжать звонить в том же диалоговом окне, пока пользователь не отменяет, сохраняя список всех вариантов, вы просто делаете это с помощью цикла. Итак, вместо этого:

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 , и настройте его для автоматического форматирования вашего кода при каждом сохранении, чтобы вам не приходилось думать о таких вещах.

0
задан wearebob 18 January 2019 в 23:00
поделиться

1 ответ

На выходном канале есть два подписчика - привязка канала (в связывателе) и ваш маршрутизатор.

В течение DirectChannel с алгоритмом диспетчеризации по умолчанию является циклический перебор, поэтому вы поочередно отправляете сообщения на маршрутизатор и напрямую в подшивку.

Вам нужен другой DirectChannel @Bean для активатора службы, чтобы все сообщения отправлялись туда, а затем в подшивку после маршрутизации.

См. sourceChannel в этом образце.

0
ответ дан Gary Russell 18 January 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: