Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tab utilisé

Sujet résolu
Anonyme
    19 juillet 2013 à 23:03:52

    Bonjour tout le monde !

    Je suis en train de réaliser un petit programme en python aidé de la Lib Qt. Le soucis réside sur le fait que je ne trouve pas la commande ordonnant à python d'afficher par exemple, tel élément dans l'onglet sélectionné/courant d'un QTabWidget. Je suis tombé sur le TP zNavigo en C++ où cela est réalisé mais malheureusement, je n'ai pas tellement compris :s Ainsi, si quelqu'un aurait une idée pour mon problème, il serait le bienvenue en j'en serais ravis !

    Merci d'avance ! nOwXO

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      19 juillet 2013 à 23:10:14

      Il est très facile de se rapporcher du C++ à python via Qt, c'est très ressemblant...

      Peux-tu donner le lien de la page ou les lignes qui t'intéressent ? Parce-que là comme ça on comprend pas trop ce que tu souhaites réellement.

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        20 juillet 2013 à 0:00:14

        Salut ! :p Ce que je recherche est sur cette page. C'est dans la partie Méthodes de gestion des onglets et plus précisément lorsque que l'auteur écrit : "pageActuelle() : une méthode bien pratique que je vous ai donnée un peu plus tôt, qui permet à tout moment d'obtenir un pointeur vers le QWebView de l'onglet actuellement sélectionné."

        Bien qu'aillant chercher un peu avant dans le TP, je n'ai pas trouvé d'élément concernant la fonction pageActuelle() :s
        Je souhaite donc réaliser le même type de fonction en python pour me permettre de, par exemple en cliquant sur un bouton, afficher un label (ça je sais faire :D) mais dans l'onglet actuellement sélectionné du QTabWidget.

        -
        Edité par Anonyme 20 juillet 2013 à 0:01:44

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          20 juillet 2013 à 1:36:44

          Bonsoir,

          En fait c'est la méthode findchild, tu fais abstraction de l'histoire des pointeurs, en python il y en a pas. Cette méthode va te renvoyer sur le widget (l'objet ou l'instance) .

          Le type qui est en paramètre correspond dans ton exemple au cast <QWebView *> se trouvant dans ton exemple

          Le paramètre name quand à lui, représente le nom de l'objet (instance) que tu souhaites appeler.

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            20 juillet 2013 à 13:28:39

            D'accord ! Hé bien je te remercie !
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              20 juillet 2013 à 13:58:58

              Autre chose en python, l'opérateur -> du C++ correspond au . (point), ça t'aideras à mieux comprendre la documentation.

              Est-ce résolu? Si oui fais-le savoir ;)

              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                20 juillet 2013 à 21:55:47

                Merci pour le conseil ! Mais en fait, mon sujet n'est pas résolu car je n'ai pas réussi à implanter la méthode findchild() :s

                J'ai donc essayé de faire un navigateur à la manière du zNavigo pour tenter de comprendre comment fonctionne cette méthode.
                Mais je n'arrive toujours pas à gérer les onglets.

                J'ai créé une première action qui ajoute un tab :

                def nouvelonglet(self):
                   self.ui.tabOnglet.addTab(QtGui.QWidget(), "about:blank")
                   #je cherche à ce qu'un QwebView soit créé dans ce nouvel onglet

                J'ai ensuite créé une autre action :

                self.ui.actionGoogle.triggered.connect(self.goGoogle)

                Puis j'ai créé une fonction (en l'occurrence goGoogle) où je set l'url dans le QWebView et où je voudrais que la page Google s'affiche dans l'onglet courrant.

                def goGoogle(self):
                   self.ui.Je l'appel comment le Webview du coup ?.setUrl(QtCore.QUrl("http://www.google.fr/"))
                   #je cherche à ce que l'url soit set dans le QWebView de l'onglet courant


                J'espère avoir été clair, merci d'avance.

                PS : J'ai aussi ajouté un 

                self.tabOnglet.setTabsClosable(True)

                 mais celui-ci ne fonctionne pas bien que les croix rouges soient apparu sur les onglets :s



                -
                Edité par Anonyme 20 juillet 2013 à 21:59:29

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  21 juillet 2013 à 0:32:06

                  Bonsoir,

                  Peux-tu créer un code minimaliste, que je puisse faire un test et vérifier ça?

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    21 juillet 2013 à 14:16:00

                     Bonjour, donc j'ai donc fait un petit GUI sous Designer (fonctionne avec PyQt4)

                    ça c'est le main.py, fichier à exécuter avec un IDE

                    # -*- coding: utf-8 -*-
                    
                    from PyQt4 import QtGui, QtCore
                    from mainwindow import Ui_MainWindow
                    import sys
                    
                    class testSDZ(QtGui.QMainWindow):
                        def __init__(self, title = "Default", parent = None):
                            super(testSDZ, self).__init__(parent)
                            self.title = title
                            self.ui = Ui_MainWindow()
                            self.ui.setupUi(self)
                            self.setWindowTitle(self.title)
                            self._initSlotButtons()
                    
                        def _initSlotButtons(self):
                            self.ui.actionGoogle.triggered.connect(self.goGoogle)
                            self.ui.actionAddtab.triggered.connect(self.nouvelOnglet)
                    
                        def goGoogle(self):
                            self.ui.tabWidget = self.findChildren(QtGui.QTabWidget)[0] #ça c'est un test pour essayer de comprendre le findchild
                            self.ui.webView_2.setUrl(QtCore.QUrl("http://www.google.fr/"))# Ici je souhaite set l'url dans le webView de l'onglet
                            #courant mais du coup le webView porte quel nom ? Parce que celui-ci, je l'ai créé avec Designer, alors qu'avec la
                            #génération auto des onglets, je ne connait pas le nom du Widget webView :s
                    
                        def nouvelOnglet(self):
                            self.ui.tabWidget.addTab(QtGui.QWidget(), "about:blank")
                            #ici il faut donc qu'un nouveau webView soit créé mais sera t'il positionné comme je l'ai fait pour l'onglet par
                            #défaut dans Designer ?
                    
                    if __name__ == "__main__":
                        app = QtGui.QApplication(sys.argv)
                        w = testSDZ("Test SDZ")
                        w.show()
                        sys.exit(app.exec_())
                    


                    Et ensuite le fichier mainwindow.py qui détient l'affiche du GUI

                    # -*- coding: utf-8 -*-
                    
                    # Form implementation generated from reading ui file 'mainwindow.ui'
                    #
                    # Created: Sun Jul 21 14:08:36 2013
                    #      by: PyQt4 UI code generator 4.10.2
                    #
                    # WARNING! All changes made in this file will be lost!
                    
                    from PyQt4 import QtCore, QtGui
                    
                    try:
                        _fromUtf8 = QtCore.QString.fromUtf8
                    except AttributeError:
                        def _fromUtf8(s):
                            return s
                    
                    try:
                        _encoding = QtGui.QApplication.UnicodeUTF8
                        def _translate(context, text, disambig):
                            return QtGui.QApplication.translate(context, text, disambig, _encoding)
                    except AttributeError:
                        def _translate(context, text, disambig):
                            return QtGui.QApplication.translate(context, text, disambig)
                    
                    class Ui_MainWindow(object):
                        def setupUi(self, MainWindow):
                            MainWindow.setObjectName(_fromUtf8("MainWindow"))
                            MainWindow.resize(800, 600)
                            self.centralwidget = QtGui.QWidget(MainWindow)
                            self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
                            self.gridLayout = QtGui.QGridLayout(self.centralwidget)
                            self.gridLayout.setMargin(0)
                            self.gridLayout.setSpacing(0)
                            self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
                            self.tabWidget = QtGui.QTabWidget(self.centralwidget)
                            self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
                            self.tab = QtGui.QWidget()
                            self.tab.setObjectName(_fromUtf8("tab"))
                            self.gridLayout_3 = QtGui.QGridLayout(self.tab)
                            self.gridLayout_3.setMargin(0)
                            self.gridLayout_3.setSpacing(0)
                            self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
                            self.webView_2 = QtWebKit.QWebView(self.tab)
                            self.webView_2.setUrl(QtCore.QUrl(_fromUtf8("about:blank")))
                            self.webView_2.setObjectName(_fromUtf8("webView_2"))
                            self.gridLayout_3.addWidget(self.webView_2, 0, 0, 1, 1)
                            self.tabWidget.addTab(self.tab, _fromUtf8(""))
                            self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
                            self.tabWidget.setTabsClosable(True)#Ajout de ma part mais ne fonctionne pas :s
                            MainWindow.setCentralWidget(self.centralwidget)
                            self.toolBar = QtGui.QToolBar(MainWindow)
                            self.toolBar.setObjectName(_fromUtf8("toolBar"))
                            MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
                            self.actionGoogle = QtGui.QAction(MainWindow)
                            self.actionGoogle.setObjectName(_fromUtf8("actionGoogle"))
                            self.actionAddtab = QtGui.QAction(MainWindow)
                            self.actionAddtab.setObjectName(_fromUtf8("actionAddtab"))
                            self.toolBar.addAction(self.actionGoogle)
                            self.toolBar.addAction(self.actionAddtab)
                    
                            self.retranslateUi(MainWindow)
                            self.tabWidget.setCurrentIndex(0)
                            QtCore.QMetaObject.connectSlotsByName(MainWindow)
                    
                        def retranslateUi(self, MainWindow):
                            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
                            self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Tab 1", None))
                            self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar", None))
                            self.actionGoogle.setText(_translate("MainWindow", "Google", None))
                            self.actionGoogle.setToolTip(_translate("MainWindow", "Google", None))
                            self.actionAddtab.setText(_translate("MainWindow", "Nouvel Onglet", None))
                            self.actionAddtab.setToolTip(_translate("MainWindow", "Add a new tab", None))
                    
                    from PyQt4 import QtWebKit
                    

                     Donc voilà les deux fichiers qui regroupent mes problèmes :s Du coup j'ai ajouter des commentaires là où je bloque
                    Merci d'avance ! nOwXO

                    -
                    Edité par Anonyme 21 juillet 2013 à 14:16:38

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      21 juillet 2013 à 15:46:26

                      J'ai du mal à comprendre ce que tu souhaites même avec tes longues pages, mais je tente ma chance quand même ;)

                      def goGoogle(self):
                              self.ui.webview = self.findChildren(QtWebKit.QWebView)[0] #ça c'est un test pour essayer de comprendre le findchild
                              self.ui.webview.setUrl(QtCore.QUrl("http://www.google.fr/"))# Ici je souhaite set l'url dans le webView de l'onglet
                              #courant mais du coup le webView porte quel nom ? Parce que celui-ci, je l'ai créé avec Designer, alors qu'avec la
                              #génération auto des onglets, je ne connait pas le nom du Widget webView :s 

                      N'oublie pas d'importer QtWebKit...



                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        21 juillet 2013 à 16:23:51

                        Merci de ta réponse, j'ai donc essayé mais cela n'a malheureusement pas fonctionné :s
                        En résumé je cherche à : Lorsque je créé un nouvel onglet, je clique dessus pour y accéder, c'est donc l'onglet utilisé, maintenant, si je clique sur mon raccourci Google (je suis toujours dans l'onglet créé), je souhaite que la page apparaisse dans cet onglet.

                        Mais cela ne fonctionne pas :s
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          21 juillet 2013 à 16:28:56

                          Il me semble que la méthode setCurrentWidget est ce que tu cherches

                          def nouvelOnglet(self):
                              self.ui.tabWidget.addTab(self.ui.webView_2, "about:blank")
                              self.ui.tabWidget.setCurrentWidget(self.ui.webView_2)

                          -
                          Edité par Anonyme 21 juillet 2013 à 16:30:57

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            21 juillet 2013 à 17:34:07

                            Ha merci ! ça fonctionne presque ! Maintenant, si je clique sur ajouter un nouvel onglet, et que je load ma page Google, elle se fait dans le bon onglet, mais si je reviens sur le premier onglet, et que je tente de load une page Google, c'est le deuxième onglet qui s'affiche et la page Google se reload sur ce deuxième onglet :s

                            Cela doit venir, je pense, du paramètre de la méthode setCurrentWidget, self.ui.webView_2 mais je ne suis pas sûr



                            -
                            Edité par Anonyme 21 juillet 2013 à 17:34:59

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              22 juillet 2013 à 10:09:13

                              Ok, sur le principe je dirais qu'il faudrait jouer avec les index, regarde ce qui se passe

                              def goGoogle(self):
                                      print self.ui.tabWidget.currentIndex()
                                      self.ui.webview = self.findChildren(QtWebKit.QWebView)[0] #ça c'est un test pour essayer de comprendre le findchild
                                      self.ui.webview.setUrl(QtCore.QUrl("http://www.google.fr/"))# Ici je souhaite set l'url dans le webView de l'onglet
                                      #courant mais du coup le webView porte quel nom ? Parce que celui-ci, je l'ai créé avec Designer, alors qu'avec la
                                      #génération auto des onglets, je ne connait pas le nom du Widget webView :s



                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                22 juillet 2013 à 11:55:00

                                Déjà merci de ta réponse et de ton aide, c'est super sympa ! J'ai donc essayé ce que tu m'as envoyé mais le problème persiste, si je clique sur mon bouton Google et que je suis sur mon premier onglet, la page s'affiche, puis si je créé un second onglet, et que je clique sur mon bouton Google, la page s'affiche également (avec print self.ui.tabWidget.currentIndex() qui renvoie un "1" dans la console) et à ce moment là, la page a disparu dans le premier onglet, je ne peux plus la réafficher, et il m'est impossible de créer un troisième onglet :s

                                Merci d'avance
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  22 juillet 2013 à 11:56:36

                                  Voilà j'ai un peu réfléchi, et voilà ce que je propose, en fait j'enregistre les QWebView dans une liste...

                                  # -*- coding: utf-8 -*-
                                   
                                  from PyQt4 import QtGui, QtCore, QtWebKit
                                  from mainwindow import Ui_MainWindow 
                                  import sys
                                   
                                  class testSDZ(QtGui.QMainWindow):
                                      def __init__(self, title = "Default", parent = None):
                                          super(testSDZ, self).__init__(parent)
                                          self.title = title
                                          self.ui = Ui_MainWindow()
                                          self.ui.setupUi(self)
                                          self.setWindowTitle(self.title)
                                          self._initSlotButtons()
                                          self.web = [self.ui.webView_2]
                                   
                                      def _initSlotButtons(self):
                                          self.ui.actionGoogle.triggered.connect(self.goGoogle)
                                          self.ui.actionAddtab.triggered.connect(self.nouvelOnglet)
                                   
                                      def goGoogle(self):
                                          ind = self.ui.tabWidget.currentIndex() 
                                          self.web[ind].setUrl(QtCore.QUrl("http://www.google.fr/"))
                                   
                                      def nouvelOnglet(self):
                                          web = QtWebKit.QWebView()
                                          self.web.append(web)
                                          ind = self.ui.tabWidget.addTab(web, "about:blank")
                                          self.ui.tabWidget.setCurrentIndex(ind)
                                   
                                  if __name__ == "__main__":
                                      app = QtGui.QApplication(sys.argv)
                                      w = testSDZ("Test SDZ")
                                      w.show()
                                      sys.exit(app.exec_())



                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    22 juillet 2013 à 12:01:36

                                    Effectivement ! ça fonctionne ! Merci ! c'est extrêmement sympa de ta part d'avoir résolu mon problème, je n'aurait vraiment pas pensé à utiliser une liste ! Merci encore !
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      22 juillet 2013 à 12:08:24

                                      En fait le principe est toujours le même quelque soit la GUI utilisée, à partir du moment où tu rajoutes quelque chose et que tu dois l'utiliser une autre fois, tu as cette possibilité de liste qui enregistre tes objets. À l'aide d'index et surtout parce-que Qt fait pratiquement tout le travail, ça devient un jeu d'enfants ;)

                                      Mets en résolu si tout est clair pour toi...

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Tab utilisé

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown