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 :

Comment effectuer des actions sur des onglets ajoutés dynamiquement et ayant le même contenu ?


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 61
    Par défaut Comment effectuer des actions sur des onglets ajoutés dynamiquement et ayant le même contenu ?
    J'ai ajouté mes tabs dynamiquement comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def add_new_tab(self,index,text):
     
        self.new_tab = InterfaceTemplateDialog()
        self.tabs.addTab(self.new_tab,text)
        self.tabs.setTabText(index,text)
    Ma classe InterfaceTemplateDialog qui définit le contenu des tabs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class InterfaceTemplateDialog(QtGui.QDialog, FORM_CLASS):
     
    def __init__(self,parent=None):
        """Constructor."""
        super(InterfaceTemplateDialog, self).__init__(parent)
     
        self.setupUi(self)
     
     
        self.run_tranus_btn = self.findChild(QtGui.QPushButton,'run_tranus_btn')
        self.spin_box = self.findChild(QtGui.QSpinBox,'spinBox')
     
        #imploc checkboxes 
        self.checkBox_22 = self.findChild(QtGui.QCheckBox,'checkBox_22') ....etc
    C'est vrai que je peux connaitre le tab qui est sélectionné en utilisant la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.tabs.currentIndex()
    mais ce que je veux connaitre c'est si jamais j'appuie sur un bouton je pourrais savoir dans quel tab l'action a été réalisée (tab 1 ou 2 ou ...).

  2. #2
    Expert confirmé

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

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

    mais ce que je veux connaitre c'est si jamais j'appuie sur un bouton je pourrais savoir dans quel tab l'action a été réalisée (tab 1 ou 2 ou ...).
    Heu, quelle action ?


    Par contre ton code est surprenant, Les onglets sont de simples QWidgets or tu les fait hériter de QDialog, pourquoi diable !?

    Et aussi de FORM_CLASS qui, me dit mon petit doigt, est un widget que tu as créé avec Designer. Si c'est bien le cas supprime ce QDialog.

    Tu n'as, non plus, aucun besoin de rechercher tes widgets avec findChild si tu connais leur nom.

    Pour t'en convaincre ajoute un print juste après le setupUi, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        self.setupUi(self)
        print(self.run_tranus_btn.text(), self.spinBox.value())

  3. #3
    Membre confirmé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 61
    Par défaut
    Bonjour,

    Merci pour votre réponse. Juste pour ajouter le contexte, je suis en train de développer un plugin Python sur QGIS.
    C'est vrai que je n'ai pas besoin de chercher les widgets par findchild ( ton print marche correctement ) mais ce n'est pas mon problème pour l'instant.
    FORM CLASS est un widget que j'ai créé avec QT Creator.
    Quand j'ai enlevé QDialog, j'ai eu cette erreur :
    TypeError: object.__init__() takes no parameters 
    Traceback (most recent call last):
      File "C:/Users/emna/.qgis2/python/plugins\OptionsTRANUS\options_tranus_dialog.py", line 112, in launch_options_TRANUS
        dialog.show()
      File "C:/Users/emna/.qgis2/python/plugins\OptionsTRANUS\launch_tranus_dialog.py", line 54, in show
        self.put_tabs()
      File "C:/Users/emna/.qgis2/python/plugins\OptionsTRANUS\launch_tranus_dialog.py", line 41, in put_tabs
        self.add_new_tab(index,title)
      File "C:/Users/emna/.qgis2/python/plugins\OptionsTRANUS\launch_tranus_dialog.py", line 48, in add_new_tab
        self.new_tab = InterfaceTemplateDialog()
      File "C:/Users/emna/.qgis2/python/plugins\OptionsTRANUS\interface_template.py", line 15, in __init__
        super(InterfaceTemplateDialog, self).__init__(parent)
    TypeError: object.__init__() takes no parameters
    
    Le résultat de ton print est :
    (u'Run TRANUS', 0)
    (u'Run TRANUS', 0)
    (u'Run TRANUS', 0)
    J'ai 3 tabs pour cet exemple, si jamais je clique sur le bouton Run TRANUS ou j’incrémente le spinbox comment je peux connaitre sur quel tab ( tab 1 ou tab 2 ou tab 3) l'action a été réalisée.

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Supprime le parent de cette ligne là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        super(InterfaceTemplateDialog, self).__init__(parent)
    Pour ton problème, soit tu mets un bouton dans chaque onglet, soit tu implémentes un signal sur chacun des widgets et tu maintiens une liste des dernières actions effectuées.

    La première solution me paraît plus simple.

  5. #5
    Membre confirmé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 61
    Par défaut
    Je l'ai supprimé mais ça affiche aussi un problème : AttributeError: 'InterfaceTemplateDialog' object has no attribute 'setObjectName

    Effectivement, j'ai mis un bouton dans chaque onglet (le même bouton). Quand je clique sur le bouton et que ça réalise une action, je ne sais pas de quel tab j'ai cliqué. Mon problème est de relier les références des tabs avec les actions sur chaque tab. J'essaie d'ajouter un attribut index dans la classe IntefaceTemplateDialog. Je suis en train de voir.

  6. #6
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Je ne comprend pas très bien pourquoi tu parles de QtCreator, je sais qu'on peut y implémenter le support de Python (il doit y avoir un tuto à ce sujet sur ce site) mais pour les widgets des onglets je pense que tu as utilisé le Designer (éventuellement instancié à partir de QtCreator).

    Quoiqu'il en soit il est possible qu'au lieu de créer un QWidget tu n'aies fais qu'une Forme. Ce qui ne convient pas, les onglets doivent être des widgets.

    Ça marchait précédemment parce que tu camouflais ta Form derrière un QDialog.

    Tu peux copier ici le contenu du fichier ui ?

Discussions similaires

  1. Gérer des événements sur des actions du navigateur
    Par Anonyme5571 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/01/2015, 11h57
  2. Réponses: 8
    Dernier message: 04/10/2013, 08h43
  3. Comment ajouter des séries dans des graphes sur des feuilles variables
    Par Molomarcopolo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/07/2012, 16h26
  4. Trigger pour mettre des droits sur des procedures et des vues
    Par briino dans le forum Développement
    Réponses: 3
    Dernier message: 23/09/2009, 09h44
  5. Réponses: 6
    Dernier message: 18/04/2005, 21h12

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