Séparer l'interaction de l'utilisateur à partir de programmical changement: PyQt, QComboBox
J'ai plusieurs QComboBoxes dans mon PyQt4/Python3 GUI et ils sont remplis d'une des entrées d'une base de données lors de l'initialisation. Initiale CurrentIndex est mis à 0. Il y a aussi une case à cocher qui change la langue de mon les zones de liste déroulante. Pour objectif de préserver la sélection de l'utilisateur de sauvegarder les index de l'élément courant et setCurrentIndex à ce nombre après je remplir ComboBox avec les éléments traduits. Toutes ces actions émettent currentIndexChanged signal.
Sur la base des éléments sélectionnés dans QComboBoxes certains intrigue est affiché. L'idée est de redessiner le tracé en ligne - dès que l'utilisateur modifie l'un de ComboBox élément courant. Et là, j'ai un problème car si je le rafraîchissement de l'intrigue à chaque fois le signal de currentIndexChanged est rependu, je retrace également à plusieurs reprises au cours de l'initialisation et si la traduction cochez la case de sélection a été changé.
Quelle est la meilleure façon de séparer ces cas? En principe, j'ai besoin de séparer programmical actuelle de l'Indice de Changement de la part de l'utilisateur, et la mise à jour de l'intrigue que dans le cas d'une version ultérieure (pendant l'initialisation de l'interface graphique, je peux programically appel de fonction plot de mise à jour une fois). Dois-je écrire/réécrire le signal? Si oui, je n'ai jamais fait ça avant et il souhaite de tout indice ou un bon exemple. Utiliser un autre signal? Ou peut-être il ya un moyen temporaire de bloquer tous les signaux?
OriginalL'auteur Katya | 2012-02-08
Vous devez vous connecter pour publier un commentaire.
Il y a quelques différentes choses que vous pouvez essayer.
Tout d'abord, vous pouvez assurez-vous de faire tout votre initialisation avant vous connecter les signaux.
Deuxièmement, vous pouvez utiliser le activé signal n'est envoyé chaque fois que le utilisateur sélectionne un élément. (Mais notez que, contrairement à currentIndexChanged, ce signal est envoyé même si l'indice n'a pas changé).
Troisièmement, vous pouvez utiliser blockSignals d'arrêter temporairement de toute signaux envoyés tandis que l'indice actuel est en train d'être modifiée par programmation.
Voici un script qui illustre ces possibilités:
Avec Qt Designer, vous ne pouvez vous connecter pré-existant signaux de pré-emplacements existants (par opposition à vos propres gestionnaires). Donc, dans la pratique, presque tous les signaux doivent connecté après l'interface graphique a été mis en place (à moins que l'application est très simple). Personnellement, je n'utilise Qt Designer pour la pose de l'interface graphique, et très rarement l'utiliser pour la connexion de signaux.
Activé fonctionne pour moi en Python3 avec PySide2
OriginalL'auteur ekhumoro