Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ctrl+c impossible dans un frame ?!

Sujet résolu
    29 août 2014 à 13:27:31

    Bonjours a tous et toutes,

    Dans un programme de ma création, c'est toujours le même pour ceux qui on lus mon dernier sujet voir ici, j'ai voulus faire une fenêtre où l'on pourrait sélectionner des adresse URL, problème on peut sélectionner le texte seulement si j’autorise la modification du texte, donc sans:

    text.config(state='disabled')

    Mais mon but est que les utilisateurs du programme puisse copier (Ctrl c, Ctr v) les URL pour les rentrer dans une barre de recherche,

    et sa je n'y parvient pas .

    Merci d'avance pour vos réponses.

    ps: voici 2 images résultats du codes

    sans la ligne de code si-dessus:

    et avec cette ligne:

       Voila voila, bonne journée a vous. 

    • Partager sur Facebook
    • Partager sur Twitter
      29 août 2014 à 13:30:41

      Pardon j'ai oublier de vous mettre un exemplaire du code, le voici:

      Li=Toplevel()
      Li.geometry("900x140")
      Li.title('A propos')
      Li.configure(bg='Light grey')
      y="Liens"
      Label(Li, text=y, fg='darkslateblue', bg='Light grey', font=('Courier', 16)).pack()
      frame1=Frame(Li)
      frame1.configure(bg='Light grey')
      frame1.pack(side=BOTTOM)
      scrollbar = Scrollbar(frame1)
      scrollbar.pack(side=RIGHT, fill=Y)
      text= Text(frame1, wrap=WORD, yscrollcommand=scrollbar.set)
      a="Les forum python sur openclassrooms : http://fr.openclassrooms.com/forum/categorie/langage-python.\n"
      b="L'aide de elafitz : http://fr.openclassrooms.com/forum/sujet/une-image-un-poil-trop-grande.\n"
      text.insert(END, a+b)
      text.config(fg='firebrick3', bg='Light grey', font=('Courier', 11))
      text.pack()
      text.config(state='disabled')
      scrollbar.config(command=text.yview)
      Li.focus()
      Li.mainloop()

      Merci.

      ps: Je travaille avec tkinter et un python3.3

      -
      Edité par Lozul 30 août 2014 à 10:28:29

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        29 août 2014 à 22:35:31

        Une fois que tu as fais la sélection de ton text, tu le récupères et utilises la méthode clipboard_append

        Un bon exemple ici avec la méthode doCopy

        • Partager sur Facebook
        • Partager sur Twitter
          30 août 2014 à 9:22:45

          Excuse moi, je ne vois pas bien où je dois ajouter cliboard_append,

          Au niveau de: 

          a="Les forum python sur openclassrooms : http://fr.openclassrooms.com/forum/categorie/langage-python.\n"

          Ou ailleurs ?

          • Partager sur Facebook
          • Partager sur Twitter
            30 août 2014 à 11:53:50

            Merci oldProgrammer, j'ai utiliser: 

            def sel():
                fg = Tk()
                t = Label(fg, text=frame1.selection_get())
                t.pack()
                fg.mainloop()

            et:

            copy = Button(frame1, text='Copy', command=sel)

            Grace a sa j'obtiens

            Maintenant j'aimerais savoirs comment faire pour que mon copier puisse être coller dans une barre de recherche (quand je fais Ctrl v évidemment sa ne marche pas)

             a+

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              30 août 2014 à 12:03:43

              Pour détecter Ctrl-V, tu fais du binding, pour cela tu dois utiliser la méthode bind, du widget intéressant et ça doit être une ligne du genre

              widget.bind('<Control-c>', maFonction)

              où maFonction est la fonction récupératrice de la valeur (selection.get) et que tu devras ajouter dans ton clipboard via la fonction clipboard_append.

              Elle se présentera sous cette forme

              def maFonction():
                  value = frame1.selection_get()
                  frame1.clipboard_append(value)
              
              frame1 = Frame(...)
              frame1.pack()
              frame1.bind('<Control-c>', maFonction)



              -
              Edité par Anonyme 30 août 2014 à 12:07:35

              • Partager sur Facebook
              • Partager sur Twitter
                31 août 2014 à 10:45:12

                Bonjours,

                Merci pour cette réponse très instructive, problème j'ai beau faire comme vous, je n'obtiens rien de nouveau...

                Ma petite fenêtre s'ouvre toujours, mais ma barre de recherche reste malheureusement toujours vide après un Ctrl v.

                Dans le nouveau codes j'ai rajouter les lignes que vous m'avez conseiller.

                def Li():
                  Li=Toplevel()
                  Li.geometry("900x140")
                  Li.title('A propos')
                  Li.configure(bg='Light grey')
                  y="Liens"
                  Label(Li, text=y, fg='darkslateblue', bg='Light grey', font=('Courier', 16)).pack()
                  frame1=Frame(Li)
                  frame1.configure(bg='Light grey')
                  
                  def maFonction():
                    value = frame1.selection_get()
                    frame1.clipboard_append(value)
                  
                  frame1.pack(side=BOTTOM)
                  frame1.bind('<Control-c>', maFonction)
                  
                  def sel():
                    fg = Tk()
                    t = Label(fg, text=frame1.selection_get())
                    t.pack()
                    fg.mainloop()
                  scrollbar = Scrollbar(frame1)
                  scrollbar.pack(side=RIGHT, fill=Y)
                  text= Text(frame1, wrap=WORD, yscrollcommand=scrollbar.set)
                  a="Les forum python sur openclassrooms : http://fr.openclassrooms.com/forum/categorie/langage-python.\n"
                  b="L'aide de elafitz : http://fr.openclassrooms.com/forum/sujet/une-image-un-poil-trop-grande.\n"
                  text.insert(END, a+b)
                  text.config(fg='firebrick3', bg='Light grey', font=('Courier', 11))
                  copy = Button(frame1, text='Copy', command=sel)
                  copy.pack()
                  text.pack()
                  #text.config(state='disabled')
                  scrollbar.config(command=text.yview)
                  Li.focus()
                  Li.mainloop()

                Ai-je omis une ligne , où toute autre chose importante ? 

                J'ai conscience d'abuser de votre aide, Merci beaucoup ! 

                -
                Edité par Lozul 31 août 2014 à 10:45:53

                • Partager sur Facebook
                • Partager sur Twitter
                  31 août 2014 à 10:52:53

                  Je pense qu'il me manque une ligne disant  qu'il faut sortir la ligne copier du codes , non ?

                  Ps: quand je parle d'une barre de recherche, c'est de celle si que je parle:

                  Au cas où il y aurais un mal entendus.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    31 août 2014 à 11:52:32

                    Houla, on se rend compte des difficultés maintenant.

                    Déjà on va régler un 1er problème, pourquoi avoir deux boucles événementielles (mainloop) dans le code, il ne doit y en avoir qu'une ?

                    Ensuite à vérifier, y a-t-il plusieurs instances Tk dans le programme, ligne dans ce format ?

                    win = Tk() # instance Tk

                    Si oui il ne doit y en avoir qu'une. Pour recréer une fenêtre, on utilise la classe Toplevel, j'ai vu que ça a été déjà fait une fois, mais le fais-tu dans tout le programme ?

                    -
                    Edité par Anonyme 31 août 2014 à 11:52:59

                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 septembre 2014 à 10:27:09

                      Bonjours oldProgrammer,

                      Tout d’abord il faut savoirs que la ligne n°22 dans le code que je vous ais présenter le 31 août, ne sera normalement plus dans le code final, je m'explique:

                      le 

                      def sel():
                          fg = Tk()
                          t = Label(fg, text=frame1.selection_get())
                          t.pack()
                          fg.mainloop()

                      était juste pour vérifier si 

                      frame1.selection_get()

                      fonctionnait en le faisant apparaître dans une fenêtre a part (: la fenêtre "fg").

                       Pour votre deuxième questions, je vais être franc, je ne comprend pas, voir rien à se que vous me dites ^_^

                        Merci.


                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 septembre 2014 à 22:04:47

                        bonjour,

                        et bien là, dans cette ligne :

                        copy = Button(frame1, text='Copy', command=sel)

                        ce n'est pas sel qu'il faut mettre, mais une autre fonction car la fonction sel, affiche une fenêtre et un label et rien d'autre,

                        1_ comme disais très justement oldprogrammer, mainloop ne sert uniquement qu'a maintenir en vue la fenêtre principale, on ne doit l'avoir qu une fois dans un module, si vous voulez avoir d'autre fenêtres séparées, utilisez toplevel avec la méthode pack, par exemple

                        2_ si je puis me permettre, il faudrait éviter d'utiliser des noms identiques (Li) pour des choses différentes , ça évite les confusions dans la lisibité, surtout quand un code commence à être conséquent , et même si ça fonctionne

                        3_ j'ai une appli où il y a une Entry, si je fais Ctrl+C, je peux faire Ctrl+V n'importe où, même dans google

                        j'espère vous avoir aidé ))

                        A+

                        E.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 septembre 2014 à 22:28:36

                          un truc que je fais souvent aussi, c'est que si j'ai la même couleur dans plusieurs objets, je déclare une variable avec cette couleur et

                          par exemple:

                          maCouleur = "Light grey"

                          monTexte = Text(cont, bg=maCouleur)

                          maFrame = Frame(cont, bg=maCouleur)

                          monBouton = Button(cont, bg=maCouleur)

                          du coup, si je décide de changer de couleur, je n'ai qu à modifier "Light grey", et tous les objets seront modifiés, on gagne du temps et de la lisibilité,

                          je suis conscient que je suis hors sujet, mais ça peut être utile ))

                          E.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 septembre 2014 à 22:56:46

                            "du coup, si je décide de changer de couleur, je n'ai qu à modifier "Light grey", et tous les objets seront modifiés, on gagne du temps et de la lisibilité,"

                            Je doute que ça fonctionne. Je pense plutôt qu'il faut faire une MAJ des widgets. Pour faire simple, il suffit de mettre tous les widgets qu'on veut modifier dans une liste ou un tuple et de créer une fonction pour changer la couleur:

                            tuple_widgets = (monTexte, maFrame, monBouton)
                            
                            nouvelle_couleur = "green"
                            def changement_couleur(couleur=nouvelle_couleur):
                                for widget in tuple_widgets:
                                    widget["background"] = couleur



                            -
                            Edité par Olygrim 3 septembre 2014 à 10:06:52

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Précepte: Le mieux est l'ennemi du bien
                              3 septembre 2014 à 11:21:33

                              bonjour,

                              si on passe par config, évidemment que ça marche !  )))

                              • Partager sur Facebook
                              • Partager sur Twitter
                                3 septembre 2014 à 11:35:58

                                bonjour,

                                1_ à l'ouverture de l'application :

                                maCouleur = "Light grey"

                                monTexte = Text(cont, bg=maCouleur)

                                maFrame = Frame(cont, bg=maCouleur)

                                monBouton = Button(cont, bg=maCouleur)

                                ça marche!

                                2_ pendant que l'application est ouverte:

                                reservoir = [monTexte, maFrame,monBouton]

                                for i in reservoir:

                                      i.config(bg = maCouleur)

                                ça marche !

                                Le doute provient de la non-essayitude !:-°_:honte:

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  3 septembre 2014 à 12:04:11

                                  Tout d'abord, merci d'éviter les posts consécutifs. Édite plutôt ton dernier message ;) Ensuite, <br/><br/>

                                  Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention plus facilement. Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

                                  Merci d'utiliser les balises de code

                                  Bonjour,

                                  Les forums du Site du Zéro disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source. Tu as posté un code source sans utiliser cette fonctionnalité. Édite ton message en mettant ton code en forme en utilisant le bouton Image . Si tu utilises l'éditeur en version Markdown, tu dois utiliser les balises <pre class="brush: c;">Votre code ici</pre>.

                                  Cela aura pour effet de colorer ton code et donc d'en faciliter grandement la lecture. Tu auras ainsi beaucoup plus de chances d'avoir des réponses.

                                  Voici un exemple de code non coloré :

                                  Citation (code C) :

                                  int main(int argc, char *argv[])
                                  {
                                  long choixOperation;
                                  

                                  printf("Choisissez l'operation a effectuer"); / etc. / }

                                  </pre>

                                  Voici maintenant le même code coloré :

                                  int main(int argc, char *argv[])
                                  {
                                      long choixOperation;
                                   
                                      printf("Choisissez l'operation a effectuer");
                                      /* etc. */
                                  }

                                  C'est plus clair n'est-ce pas ? :)

                                  Merci de ta compréhension.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    3 septembre 2014 à 12:24:56

                                    "si on passe par config, évidemment que ça marche !  )))"

                                    Oui, de cette manière ça fonctionne :). C'est juste que ton explication tendait à dire qu'il suffisait juste de modifier maCouleur pour que le changement se fasse: “je n'ai qu à modifier "Light grey", et tous les objets seront modifiés ”

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Précepte: Le mieux est l'ennemi du bien
                                      3 septembre 2014 à 12:30:17

                                      C'est vrai que je n'ai pas été trés précis au premier coup désolé ))
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        4 septembre 2014 à 19:03:08

                                        Bonjour,

                                        Je voudrais pas vous couper, mais on s’éloigne du sujet ^_^

                                        elafitz, je suis intéressé par ton msg du 2 septembre, est-ce que tu pourrait développer t'on points 3, je cite

                                        "3_ j'ai une appli où il y a une Entry, si je fais Ctrl+C, je peux faire Ctrl+V n'importe où, même dans google"

                                        Merci

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Ctrl+c impossible dans un frame ?!

                                        × 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