2011-07-18 4 views
0

J'essaie de créer dynamiquement une liste de boutons radio représentant les ports COM ouverts sur mon ordinateur. Créer et afficher la liste la première fois est assez facile puisque je peux juste trier les ports pour être dans l'ordre numérique et puis ajouter leur bouton radio correspondant à ma disposition verticale.PyQt Trier la liste des boutons radio

Cependant, si l'utilisateur insère un nouveau périphérique qui crée un nouveau port COM, je dois trouver un moyen d'ajouter le nouveau bouton au bon endroit car il pourrait ne pas être dans le bon ordre numérique. Jusqu'à présent, la seule façon que j'ai pu faire est de me débarrasser de tous les boutons et de les rajouter après avoir trié la liste puisque addWidget ne me laisse pas spécifier où ajouter le widget. Cette méthode semble vraiment inefficace, et je suppose qu'il y a un moyen plus simple, mais je ne l'ai pas encore trouvé.

Répondre

3

Au lieu d'utiliser addWidget(), déterminer l'index dans la liste des boutons pour placer la nouvelle, et d'utiliser QBoxLayout.insertWidget(index, widget) pour l'insérer là:

newButton = QRadioButton(...) 
newText = newButton.text() 

index = 0 
for button in get_buttons(): 
    if button.text() >= newText: 
     break 
    index += 1 

layout.insertWidget(index, newButton) 
+0

Merci Je vais essayer cela. Savez-vous ce qui se passerait si j'essayais d'insérer un bouton avec un index supérieur au nombre de "boîtes" créées par la mise en page? Par exemple, si les ports 1,2,3 et 10 sont ouverts, est-ce que je pourrais faire quelque chose comme 'layout.insertWidget (10, com10button)' sans que cela crée des boîtes vides entre les boutons 3 et 10? – gwenger

+1

J'ai juste tout travaillé comme je le veux. J'ai utilisé le module bisect pour déterminer l'index au lieu d'avoir à écrire ma propre boucle pour déterminer l'index puisque l'ordre est basé sur un entier. – gwenger

+0

@gwenger: Bon point. Si votre liste est toujours triée en utilisant une valeur de référence intégrale, le module 'bisect' est le chemin à parcourir. –

Questions connexes