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

Python Discussion :

Jongler entre les onglets d'un navigateur web


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Jongler entre les onglets d'un navigateur web
    Bonjour à tous,

    Étant un véritable débutant en Python, je me tourne vers vous afin de m'assurer si ce que je souhaite réaliser est possible et si oui, par quel moyen.

    Je souhaiterai réaliser une petite application permettant d'ouvrir un navigateur web en plein écran avec deux onglets et qui "switchera" entre les onglets toutes les minutes. Dans mon entreprise nous ne possédons qu'un seul écran de monitoring et cela nous permettrait d'avoir une vue d'ensemble de nos divers client.

    La partie qui me pose problème est celle pour jongler entre les différents onglets d'un navigateur. En effet, le module "webbrowser" semble assez limité et en me renseignant sur "selenium", cela me parraît assez complexe et peut-être surdimensionné pour cet action. Pouvez-vous me conseiller un module/librairie ou autre moyen pour effectuer cette opération ?

    Merci d'avance

    P.S. Je sais pas si j'ai ouvert le topic dans la bonne catégorie du site, j'ai hésité avec "Réseau/Web"

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Connais-tu Qt et ses bindings pour Python PyQt et PySide ?

    Qt est un framework donnant des outils dans tout un tas de domaines. Tu peux créer des interfaces graphiques et des widgets pour créer des pages à onglets existent déjà. Il possède également un module WebKit pour afficher des pages internet. Enfin, il possède des timers pour déclencher périodiquement des actions. Bref, tout ce dont tu as besoin pour ton application.

    Inconvénient : il faut installer un module supplémentaire assez volumineux.

    Si cela ne te dérange pas, Qt me semble une bonne solution.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonjour Bktero et merci pour ta réponse,

    Connais-tu Qt et ses bindings pour Python PyQt et PySide ?
    De nom uniquement.

    Qt est un framework donnant des outils dans tout un tas de domaines. Tu peux créer des interfaces graphiques et des widgets pour créer des pages à onglets existent déjà. Il possède également un module WebKit pour afficher des pages internet. Enfin, il possède des timers pour déclencher périodiquement des actions. Bref, tout ce dont tu as besoin pour ton application.
    En fait, je pensais à Tkinter pour la partie graphique et vraiment utiliser le navigateur par défaut du système si possible. Peut-être que c'est tout simplement impossible et je devrais me tourner vers PyQT et PySide.

    Inconvénient : il faut installer un module supplémentaire assez volumineux.
    Ça ne m'arrange pas spécialement, mais ce n'est pas un problème

    Je ne sais pas vraiment ce que je vais faire. Il semble que "piloter" le navigateur web par défaut d'un système soit plus compliqué que je ne le pensais. Mais si c'est possible, je pense que ça serait la solution la plus simple et la plus légère.

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Je trouvais le sujet intéressant alors j'ai codé une application minimaliste qui switche entre deux pages Internet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    import sys
    from PyQt4 import QtCore, QtGui, QtWebKit
     
    class Browser(QtGui.QTabWidget):
        def __init__(self, parent=None):
            super(Browser, self).__init__(parent)
     
            # Deux pages dans deux onglets
            page1 = QtWebKit.QWebView()
            page1.load(QtCore.QUrl("http://www.developpez.com/"));
     
            page2 = QtWebKit.QWebView()
            page2.load(QtCore.QUrl("http://www.google.com/"));
     
            self.addTab(page1, "Developpez")
            self.addTab(page2, "Google")
     
            # Creation du timer
            self.timer = QtCore.QTimer();
            self.timer.timeout.connect(self.switchTab)
            self.timer.start(3000);
     
        def switchTab(self):
            curIndex = self.currentIndex()
            if curIndex == 0 :
                self.setCurrentIndex(1)
            else :
                self.setCurrentIndex(0)
     
        def main(self):
            self.show()
     
    if __name__=='__main__':
        app = QtGui.QApplication(sys.argv)
        nav = Browser()
        nav.main()
        app.exec_()
    Il suffit d'avoir Python 2.7 et PyQt4 d'installés pour la faire fonctionner

  5. #5
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Ou sinon, une petite page web avec un tout petit javascript qui switch entre les deux pages à afficher… Mais c’est vrai, pourquoi faire simple quand…

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par mont29 Voir le message
    Ou sinon, une petite page web avec un tout petit javascript qui switch entre les deux pages à afficher… Mais c’est vrai, pourquoi faire simple quand…
    +1
    Cela correspond parfaitement au besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    une petite application permettant d'ouvrir un navigateur web en plein écran avec deux onglets et qui "switchera" entre les onglets toutes les minutes. Dans mon entreprise nous ne possédons qu'un seul écran de monitoring et cela nous permettrait d'avoir une vue d'ensemble de nos divers client.
    Dans le sens
    Dans mon entreprise nous ne possédons qu'un seul écran de monitoring et cela nous permettrait d'avoir une vue d'ensemble de nos divers client.
    vous parlez de Vidéo ? Graphiques ? Informations ?
    La page web est déjà existante ? Cela supporte les frames ?

    @+
    Merci d'utiliser le forum pour les questions techniques.

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mont29 Voir le message
    Ou sinon, une petite page web avec un tout petit javascript qui switch entre les deux pages à afficher… Mais c’est vrai, pourquoi faire simple quand…
    Cela suppose un point important : il faut connaitre JavaScript.

    Mais oui : pourquoi faire compliquer à apprendre un nouveau langage et sa mise en œuvre alors que je peux simplement le faire en 30 minutes en PyQt (ce qui me permet au passage de progresser dans une techno qui me sera utile ^^).

    Dans le cas où on connait JavaScript en revanche, je rejoins ton avis.

  8. #8
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Je suis d'accord avec Bktero, à juste titre car je suis dans ce cas (ne pas connaître javascript et HTML), et que j'aurais beaucoup plus de vitesse dans mon travail en utilisant ce que je connais déjà.

    Et peut-être que ce projet permettra au PO de progresser en python (ce qu'il recherche?)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci à tous pour vos réponses !

    Je trouvais le sujet intéressant alors j'ai codé une application minimaliste qui switche entre deux pages Internet :
    Merci beaucoup, c'est exactement ça !

    Je suis en train de regarder ton code et de voir comment il fonctionne.

    Et peut-être que ce projet permettra au PO de progresser en python (ce qu'il recherche?)
    Oui, c'est effectivement ce que je recherche.

    Bktero : Est-ce que tu m'autorise à utiliser ton programme et à y apporter quelques modifications ?

    Petite question de débutant au passage, si je souhaite rajouter un menu en haut du programme, faut-il que je l'insère directement dans la classe "Browser", ou dois-je recréer une classe ?

  10. #10
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Bktero : Est-ce que tu m'autorise à utiliser ton programme et à y apporter quelques modifications ?
    Oui, bien sûr

    Petite question de débutant au passage, si je souhaite rajouter un menu en haut du programme, faut-il que je l'insère directement dans la classe "Browser", ou dois-je recréer une classe ?
    J'ai dérivé ma classe Browser de la classe QTabWidget, qui ne contient pas de barre de menu. Tu dois pouvoir rajouter une barre de menu dans la classe Browser mais tu peux aussi changer la classe mère et utiliser QMainWindows. Elle possède une barre de menu en haut et aussi une barre de status en barre, par défaut. Tu verras que Qt est très riche.

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Tu dois pouvoir rajouter une barre de menu dans la classe Browser mais tu peux aussi changer la classe mère et utiliser QMainWindows.
    Donc, si j'ai bien compris (j'en suis pas très sûr), au début de la classe on fait appel à une autre classe (existante nativement avec pyQT) qui est "QTabWidget" mais elle ne convient pas à l'insertion d'une barre de menu.

    Donc il faudrait que j'utilise "QMainWindows" à la place.

    Mais cela ne va-t-il pas poser des problèmes vis-à-vis des widgets web ou des onglets ? Parce que dans l'idéal je souhaiterai avoir les deux éléments : menu tout en haut et onglets en dessous.

    Est-il possible de dérivé la classe "Browser" de plusieurs autres classes ?
    Comme ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class Browser(QtGui.QTabWidget, QtGui.QMainWindows):

  12. #12
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Donc, si j'ai bien compris (j'en suis pas très sûr), au début de la classe on fait appel à une autre classe (existante nativement avec pyQT) qui est "QTabWidget" mais elle ne convient pas à l'insertion d'une barre de menu.
    C'est le principe de l'héritage : si je ne rajoutais rien dans la classe dérivée, un Browser et un QTabWidget serait exactement la même chose. Comme je rajoute des trucs, un Browser est un QTabWidget modifié / étendu / amélioré (choisir la mention utile). Ce n'est pas qu'elle ne convient pas à l'insertion d'une barre de menu, c'est simplement que cette classe de base n'en contient pas. Ca doit être faisable mais pas simple d'en rajouter une. Il serait plus simple de créer une nouvelle classe dérivant de la classe générique QWidget (la classe de base des widgets graphiques en Qt) qui contiendrait une barre de menu et un QTabWidget.

    Donc il faudrait que j'utilise "QMainWindows" à la place.
    C'est l'idée. Un objet QMainWindows possède une barre menu, une barre de status et un QWidget central. Dans la classe Browser, tu crées alors une variable de classe qui est un QTabWidget, auquel tu ajoutes des onglets comme dans mon code, et ce QTabWidget peut être mis au milieu de QMainWindows (puisque QTabWidget hérite de QWidget).

    EDIT : en fait, QMainWindows te permet de rajouter de manière simple une barre de menu et une barre de status mais elles ne semblent pas être mises par défaut : http://www.riverbankcomputing.co.uk/...w.html#details
    Je me suis laissé emporter car je l'utilise avec QtDesigner (outil pour la création des interfaces graphiques) et il les ajoute automatiquement. Néanmoins, c'est un widget très adapté pour cela.



    Il faut alors modifier un peu le code que je t'ai donné, notamment pour accéder à l'index des onglets. Self n'est plus un QTabWidget mais possède un QTabWidget, ça fait un niveau supplémentaire pour récupérer l'attribut : self.tabs.index au lieu de self.index.

    Est-il possible de dérivé la classe "Browser" de plusieurs autres classes ?
    Oui, tu peux faire de l'héritage multiple en Python. Je ne suis pas très à l'aise avec cela, car j'ai du mal à savoir comment s'affichera un objet dérivant de 2 widgets graphiques différents. Il faut expérimenter.

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Donc si j'ai bien compris (désolé, les héritages sont obscures pour moi) le programme devra se présenter de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import sys
    from PyQt4 import QtCore, QtGui, QtWebKit
     
    class Test(QtGui.QMainWindow):
        def __init__(self):
            super(Test, self).__init__()
     
            self.initUI()
     
        def initUI(self):               
     
            # Menu du haut
     
            # Appel à la classe "Browser"  
     
        def main(self):
            self.show()
     
    class Browser(QtGui.QTabWidget):
        # Variable de classe QTabWidget
     
        def __init__(self, parent=None):
            super(Browser, self).__init__(parent)
     
            # Création des onglets
     
            # Creation du timer
     
        def switchTab(self):
     
            # Switch entre les onglets
     
        def main(self):
            self.show()
     
     
    if __name__=='__main__':
        app = QtGui.QApplication(sys.argv)
        "nav = Browser()"
        nav = Test()
        nav.main()
        app.exec_()
    C'est bien ça ou je suis complétement à l'Ouest ?

    Désolé pour toutes ces questions et merci beaucoup pour tes précieuses réponses

  14. #14
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    désolé, les héritages sont obscures pour moi
    Je suis plotôt noob en POO, je te comprends ^^

    le programme devra se présenter de cette manière
    C'est une manière de procéder. Personnellement, je pensais à créer une seule classe et faire tout ce que tu fais dans Browser dans Test. Faire une classe séparée augmente la modularité je pense. C'est comme tu le sens ahma.

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    J'ai un peu avancé le programme. Maintenant, les onglets sont créé dynamiquement depuis une liste dans un fichier et le switch des onglets s'adapte au nombre total des onglets. Idem pour le temps entre les switch qui est basé sur un fichier.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    # -*- coding: cp1252 -*-
    import sys
    from PyQt4 import QtCore, QtGui, QtWebKit
     
    class Browser(QtGui.QTabWidget):  
        def __init__(self, parent=None):
            super(Browser, self).__init__(parent)
     
            # Listing des liens dans le fichiers websites.ini et création des onglets
            global sw_start #Initialisation de la variable qui définit si le switch d'onglets est actif ou non
            sw_start = 1
            global tab_count
            tab_count = 0   #Initialisation d'une variable pour le compte du nombre d'onglets
            print tab_count
            websites = open("D:/Project/Monitoring/websites.ini", "r") #Ouverture du fichier contenant la liste des sites
            for ligne in websites:  #Boucle qui permet de créer un onglet par site
                sites = ligne.rstrip('\n\r')
                page1 = QtWebKit.QWebView()
                page1.load(QtCore.QUrl(sites));
                self.addTab(page1, sites)
                tab_count = tab_count +1    #Incrémente le compteur d'onglet de 1
            websites.close()    #Fermeture du ficchier
            print tab_count
            # Creation du timer
            timer_file = open("D:/Project/Monitoring/timer.ini", "r") #Ouverture du fichier contenant lA valeure du timer
            temps = timer_file.readline() #Lecture de la première ligne du fichier
            temps = int(temps)  #Conversion de la variable string en variable entier 
            self.timer = QtCore.QTimer();   
            self.timer.timeout.connect(self.switchTab)
            self.timer.start(temps);
            timer_file.close()  #Fermeture du fichier
     
        def switchTab(self):
            if sw_start == 1 :  #Si le switch des onglets est activé
                curIndex = self.currentIndex()
                counter = tab_count -1  #La variable counter devient le nombre total de sites -1 (car l'index des onglets commence à 0)
                goto = 0    #Initialisation de la variable goto
                if curIndex == counter :    #Si l'onglet en cours est le dernier onglet...
                    self.setCurrentIndex(0) #Redirige l'index sur le premier onglet
                else :  #Sinon...
                    goto = curIndex +1  #Initialise la variable goto à la valeur de l'onglet courrant +1
                    self.setCurrentIndex(goto)  #Redirige sur l'onglet de la valeur goto
            else :  #Si le switch des onglets n'est pas activé
                print "Switch OFF"
     
        def main(self):
            self.show() #Affiche les éléments
     
    if __name__=='__main__':
        app = QtGui.QApplication(sys.argv)
        nav = Browser() #Lancement de la classe Browser
        nav.main()  #Lancement de la fonction main de la classe Browser
        app.exec_()
    J'ai commencé à mettre en place la possibilité d'arrêter le switch en ajoutant une condition avec la variable globale "sw_start". Il faudrait maintenant que je créé deux bouton, un "Start" et un "Stop" qui une fois cliqués modifient la valeur de la variable "sw_start" à 1 et 0 respectivement.

    Cependant, je ne vois pas comment procéder. Pourriez-vous m'aiguiller ?

    Merci d'avance

  16. #16
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Vous utilisez simplement la classe QPushButton et le signal clicked() pour détecter la pression sur le bouton.

    Je propose que vous fassiez une classe Bouton (par exemple) car vous avez deux boutons, et héritant de QPushButton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Bouton(QtGui.QPushButton):
        def __init__(self, name, action):
            self.action = action
            self.name = name
            self.setText(self.name)
            self.connect(self, QtCore.SIGNAL("clicked()"), self.activer)
        def activer(self):
            if self.action == "start":
                sw_start = 1
            else:
                sw_start = 0
            return sw_start
    Non testé, mais c'est le principe

    ça s'appelle comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bouton_start = Bouton("start", "start")
    bouton_stop = Bouton("stop", "stop")
    N'oubliez pas de regarder la documentation tout de même, c'est important.

    Désolé si ça paraît un peu complexe, mais on doit avoir un minimum de base avec PyQt et aussi en POO, car je considère à juste titre qu'un bouton est un objet.

    Utilisez la méthode setGeometry pour placer et dimensionner correctement vos boutons.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  17. #17
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Salut !

    @Woodkand : Pour commencer, je vais faire des remarques sur ton code tel qu'il est :

    1) self.timer.timeout.connect(self.switchTab) : ici, tu connectes le signal timeout du timer à une méthode (un slot en terme Qt pour être exact, bien qu'en PyQt on ne voit pas la différence). Pour être logique, ce slot ne devrait s'exécuter qu'en cas de timeout. Si pas de timeout, pas d'exécution. Tu ne devrais pas utiliser de variable pour savoir s'il faut faire le changement d'onglet ou pas; tu devrais arrêter le timer et ainsi ne pas exécuter le slot.

    2) tab_count : cette variable ne sert à rien je pense, car tu peux récupérer le nombre d'onglets du QTabWidget avec la méthode count().

    3) goto : tu peux totalement te passer de cette variable.

    4) Je n'ai pas pu tester car il faudrait que je crée les fichiers . Mais ça me semble pas mal.

    5) J'ai rencontré des soucis avec la création des URL, je te laisse lire ce qui s'est dit ici en savoir plus


    Parlons maintenant de l'amélioration. Les 2 boutons ne changeront pas l'état d'une variable globale, comme je te l'ai dit, mais arrêteront ou redémarreront le timer.


    @Tous les deux : je ne suis pas trop d'accord avec cette classe. Une classe est censée être réutilisable telle qu'elle. Ici, elle compte sur une variable globale pour fonctionner, c'est un peu bizarre. Personnellement, je créerais un nouveau widget qui inclurait un Browser et deux QPushButton.

    EDIT : d'ailleurs, Fred comment tu fais pour placer des boutons dans un QTabWidget ? Avec setGeometry() ? Je ne vois pas comment tu peux les agencer faire sans créer une classe comme je décris ?


    J'avais étoffée le code que j'avais donné plus haut mais en transformant le Browser en QMainWindows. Si ça t'intéresse, le code est ici (il se mettra peut-être à jour de temps en temps ^^)

  18. #18
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Parlons maintenant de l'amélioration. Les 2 boutons ne changeront pas l'état d'une variable globale, comme je te l'ai dit, mais arrêteront ou redémarreront le timer.
    Je n'ai pas pris en compte le code du PO, ma classe est utilisable partout, et sw_start, même si c'est le même nom que sa globale, est une locale chez moi et n'a rien à voir avec.

    Mais j'ai pas testé, il y a peut-être une erreur, je pars du principe que le PO doit chercher un peu aussi.

    Aussi je ne suis pas parti du problème général du PO, mais de sa dernière demande.

    Pour le problème général, voir ta réponse ci-dessus

    EDIT : d'ailleurs, Fred comment tu fais pour placer des boutons dans un QTabWidget ? Avec setGeometry() ? Je ne vois pas comment tu peux les agencer faire sans créer une classe comme je décris ?
    On utilise un layout?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  19. #19
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    sw_start, même si c'est le même nom que sa globale, est une locale chez moi et n'a rien à voir avec.
    Autant pour moi. Il faut alors créer une méthode pour récupérer cette valeur avec la classe Browser ? Comment procèdes-tu ?

    On utilise un layout?
    Ben oui mais ça oblige bien à créer une classe pour contenir le layout, les boutons et le Browser ?

  20. #20
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Ben oui mais ça oblige bien à créer une classe pour contenir le layout, les boutons et le Browser ?
    Oui, évidemment, ma classe Bouton serait un objet faisant parti de ce layout.

    Autant pour moi. Il faut alors créer une méthode pour récupérer cette valeur avec la classe Browser ? Comment procèdes-tu ?
    En effet j'avais pas pensé à ça... Bien vu!

    Donc il faudrait placer la variable de la classe Browser self.sw_start

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def activer(self):
            if self.action == "start":
                self.sw_start = 1
            else:
                self.sw_start = 0
    Seulement j'ai regardé en diagonale, que viennent faire des globales dans le code?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. [AC-2007] jongler entre les records dans sous-formulaire
    Par fastpulse dans le forum IHM
    Réponses: 1
    Dernier message: 15/06/2010, 16h48
  2. Réponses: 2
    Dernier message: 02/10/2008, 15h22
  3. Jongler entre les Workbooks et WorkSheets
    Par lucie_e dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/08/2007, 13h31
  4. le passage des données entre les onglets
    Par jack_1981 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 16/05/2007, 01h12
  5. Recherche d'un outil analyser les dépendances entres les fichiers d'un site web PHP
    Par nkdb dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 06/01/2007, 20h38

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