Поле со списком PyQT реагирует только на взаимодействие с пользователем

У меня есть список, в котором вы можете выбирать пользователей. Слева от него находится поле со списком, в котором перечислены доступные группы, в которые пользователь может его поместить. Если пользователь находится в группе, поле со списком будет автоматически установлено для этой группы. Я хочу сделать так, чтобы при изменении выбора группы пользователь перемещался в эту группу. Я добавил это соединение:

QtCore.QObject.connect(self.GroupsBox, QtCore.SIGNAL("currentIndexChanged(QString)"), self.HandleGrouping)

Проблема в том, что, поскольку я буду выбирать разных пользователей в разных группах, каждый раз, когда я выбираю нового пользователя, параметр по умолчанию в поле со списком меняется, и Qt регистрирует это как сигнал «currentIndexChanged».

Похоже, нет никакого способа запускать сигнал только при прямом взаимодействии пользователя с самим виджетом. Какие методы я могу использовать, чтобы обойти это?


person directedition    schedule 27.04.2009    source источник


Ответы (1)


Перехватите сигнал от QComboBox (activated(int index)) и обновите выбранный пользователь на основе этого. В вашей функции Handler ничего не делайте, если выбранный индекс в поле со списком совпадает с группой, в которой находится выбранный пользователь.

Возможно, переместите поле со списком справа от списка пользователей, так как ваш порядок действий будет следующим: «Выбрать пользователя» -> «Выбрать группу».

person Jason Coon    schedule 27.04.2009
comment
+1 за изменение из-за порядка действий (и сигнала активированного() тоже). Если направленность не программирует какой-то пользовательский интерфейс с направлением справа налево? Интересно, делают ли это другие культуры? - person ; 28.04.2009
comment
@Chris Cameron, Qt может автоматически отражать макет для локалей RTL. Чтобы проверить это самостоятельно, просто передайте переключатель -reverse в командной строке любому приложению Qt. - person Parker Coates; 29.04.2009