IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Cacher un onglet dans un QTabWidget


Sujet :

PyQt Python

  1. #1
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 813
    Billets dans le blog
    1
    Par défaut Cacher un onglet dans un QTabWidget
    Bonsoir à tous

    Aujourd'hui j'ai eu un souci car j'avais besoin de cacher certains onglets d'un QTabWidget.
    J'ai bien trouvé la méthode setTabEnabled() permettant d'activer/désactiver un onglet mais j'ai pas trouvé de setTabVisible() ou setTabHidden() qui m'auraient permis de cacher/afficher ledit onglet

    Pourtant, la doc de setTabEnabled() dit ceci
    Note that even a disabled tab/page may be visible. If the page is visible already, QTabWidget will not hide it; if all the pages are disabled, QTabWidget will show one of them.
    D'après ce que je comprends de la partie en rouge "si la page est déjà visible, QTabWidget ne la cachera pas". Ce qui sous-entend que la page peut être invisible. Mais comment ?

    J'ai trouvé toutefois une solution de contournement
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # Commencer par supprimer les tab résiduels - Cela ne les efface pas mais les détache du tabWidget
    for i in range(tabWidget.count()):
        # Attention, la suppression d'un tab décale les indices des tab restants donc pour faire simple, on laisse l'indice 0 => cela supprimera à chaque itération le premier tab
        tabWidget.removeTab(0)
     
    # Réattacher au tabWidget les tab qui m'intéressent
    for tab in monTableauPerso:
        if tab["doit etre affiché"]:
            tabWidget.addTab(...)

    Bon ça fonctionne mais si qqun a une meilleure idée...

    Merci à tous
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Salut,

    Si tu fais directement removeTab avec l'index de celui que tu veux cacher,
    ça fonctionne tout aussi bien.

    Ou j'ai rien compris.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 813
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Si tu fais directement removeTab avec l'index de celui que tu veux cacher,
    ça fonctionne tout aussi bien.
    Salut
    C'est effectivement ce que j'ai fait (comme tu peux le voir dans mon exemple). Toutefois, comme je l'ai dit, il faut faire gaffe car quand l'onglet est enlevé, les index sont décalés avec.
    Exemple: tu crées 3 onglets "toto", "titi" et "tata" qui ont donc les index 0, 1 et 2.
    Si tu supprimes l'onglet "titi" => tabWidget.removeTab(1), alors l'onglet "toto" reste à 0 mais l'onglet "tata" devient l'index 1. Donc si tu veux virer les onglets "toto" et "tata", il te faut faire removeTab(1) + removeTab(1)

    Citation Envoyé par VinsS Voir le message
    Ou j'ai rien compris.
    J'espérais pouvoir trouver une méthode permettant simplement de cacher l'onglet et non passer par une phase de "je détache tous les onglets" puis "je rattache seulement ceux qui m'intéressent". On peut bien entendu essayer de remplacer ça par une phase "je détache les onglets qui ne m'intéressent pas" mais faut alors super bien gérer les index (sans compter la gestion à faire au moment où on veut faire réapparaitre les onglets de notre choix)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Dans mon projet Oqapy, je gère très exactement ce problème.

    Soit un tabWidget comptant minimum deux onglets, maximum 26 onglets selon les besoins de l'utilisateur.

    Le premier et le dernier onglets doivent toujours occuper ces deux places respectives, et les autres onglets doivent toujours réapparaîtrent dans le même ordre.

    Cet ordre n'est pas alphabétique. Trop simple.

    Ca se résoud avec une simple liste.

    au départ:

    list = [0, 25]

    L'utilisateur crée un onglet pour le dossier 5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    list.append(5)
    list.sort()
    list = [0, 5, 25]

    L'onglet est créé ensuite à l'index du chiffre 5 dans la liste.
    Cette liste me donne aussi une correspondance entre un onglet et l'objet qu'il représente.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 813
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par VinsS Voir le message
    L'onglet est créé ensuite à l'index du chiffre 5 dans la liste.
    Cette liste me donne aussi une correspondance entre un onglet et l'objet qu'il représente.
    Ouais tu as raison. Effectivement, si tu rajoutes ta propre gestion des onglets et que tu répercutes tes addTab ou removeTab dans ta gestion, tu connais alors en permanence les index qui vont bien. Et en plus tu peux même gérer ton propre ordonnancement...

    Merci
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/05/2009, 14h10
  2. Ajouter un onglet dans QTabWidget
    Par Invité dans le forum Qt
    Réponses: 6
    Dernier message: 26/02/2008, 15h46
  3. [C#] Cacher des onglet(s)
    Par Jfrancois57 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/04/2004, 23h17
  4. [BCB6] Probleme onglet dans IDE
    Par bgautier dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/01/2004, 16h20
  5. Comment cacher des propriétés dans un nouvel objet ?
    Par Pedro dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/10/2003, 18h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo