web-dev-qa-db-fra.com

Comment définir l'onglet actuel de QTabWidget par nom?

QTabWidget de PyQt5 a une méthode setCurrentIndex que vous pouvez utiliser pour obtenir un onglet particulier pour devenir l'onglet actif. Je n'arrive pas à trouver un moyen d'indexer par nom d'onglet (que j'ai défini dans Qt Designer). Existe-t-il un moyen (direct ou indirect) d'indexer par nom à la place?

http://doc.qt.io/qt-5/qtabwidget.html#currentIndex-prop

10
aoh

Le nom de l'onglet devient le nom d'objet du widget défini comme page de l'onglet. Lorsque l'onglet est ajouté, la page sera automatiquement re-parentée avec le widget de pile interne du widget d'onglet. Cela signifie que vous pouvez obtenir une référence à la page comme ceci:

page = tabwidget.findChild(QWidget, tabname)

et obtenez son index comme ceci:

index = tabwidget.indexOf(page)

ou définissez l'onglet actuel directement par son nom comme ceci:

tabwidget.setCurrentWidget(tabwidget.findChild(QWidget, tabname))
11
ekhumoro

Une alternative est de se souvenir de l'index des onglets lors de son ajout:

index = tabWidget.addTab(myWidget)
tabWidget.setCurrentIndex(index)
2
jotrocken

Une méthode qui donne un tab_name renvoie une liste d'index pour les onglets dont les noms correspondent au tab_name.

def get_indices(tab_name):
    return [index for index in range(tab_widget.count())
        if tab_name == tab_widget.tabText(index)]

Après avoir trouvé l'index avec cette fonction, les méthodes PyQt standard peuvent être utilisées.

Pas la meilleure façon de le faire, mais peut être utile parfois.

2