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

GTK+ avec Python Discussion :

deux spinnbutton qui se répondent en boucle


Sujet :

GTK+ avec Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Mars 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 1
    Par défaut deux spinnbutton qui se répondent en boucle
    bonjour

    je suis en train de faire un programme de recadrage d'image par lot et j'ai un problème concernant les changements de valeurs de spinbutton.


    donc, j'ai deux spinbutton pour redimensionner l'image.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        resize_width_ajustement = gtk.Adjustment(width, 0, width, 1)
        resize_height_ajustement = gtk.Adjustment(height, 0, height, 1)
        resize_width = gtk.SpinButton(resize_width_ajustement)
        resize_height = gtk.SpinButton(resize_height_ajustement)
        resize_height.connect("value_changed", redimensionner, "height", resize_width)
        resize_width.connect("value_changed", redimensionner, "width", resize_height))
    je voudrais conserver le ratio de l'image, donc en modifiant le premier, le second va être modifié pour conserver le ratio:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def redimensionner(entree, widget, secwidget):
        global width_redim
        global height_redim
        if widget == "width":
            width_redim = entree.get_value()
            height_redim = width_redim / ratio
            secwidget.set_value(int(height_redim))
        elif widget == "height":
            height_redim = entree.get_value()
            width_redim = height_redim * ratio
            secwidget.set_value(int(width_redim))
    le soucis est que l'opération n'est pas très précise (au pixel près) et donc la modification du deuxième entraine une modification du premier qui entraine une modification du deuxième, et s'arrentent au bout de deux ou trois tours.
    du coup la saisie est impossible.
    je n'ai pas trouvé d'autres signaux qui permettent de contourner ce problème.


    voila, j'ai mis le script en piece jointe.
    d'ailleur si vous avez des remarques et conseil concernant celui ci, je suis prenneur vu que je débute en python.

    merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 151
    Par défaut
    Bonjour,

    Le problème est que lorsque tu fais un set value, le signal value_changed est émit ce qui va provoquer un set_value sur le second spinner qui va émettre à son tour un value_changed de l'autre widget, etc.

    La solution serait de bloquer ce signal avant d'appeler set_value et de le débloquer une fois le changement fait.

    Tu peux utiliser ces méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        def handler_block(handler_id)
        def handler_unblock(handler_id)
        def handler_block_by_func(callable)
        def handler_unblock_by_func(callable)
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    secwidget.handler_block_by_func(redimensionner)
    secwidget.set_value(int(width_redim))
    secwidget.handler_unblock_by_func(redimensionner)
    Voir ce lien pour plus de précision.

Discussions similaires

  1. Communication entre deux fenetres qui n'ont pas de lien de parenté
    Par Invité dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/09/2006, 15h58
  2. 0% CPU selon ps pour deux setiathome qui tournent!!!
    Par SaintAmand dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 21/05/2006, 21h40
  3. Deux requetes qui se bloquent !!!
    Par soltani.slim dans le forum ASP
    Réponses: 3
    Dernier message: 16/02/2006, 14h18
  4. Réponses: 10
    Dernier message: 10/06/2004, 16h20
  5. Que deux événements qui se passent en même temps.
    Par Melchisedec dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 03/08/2003, 14h24

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