Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / changer text Button avec popmenu

changer text Button avec popmenu

Remonter à Forum général Python
  • changer text Button avec popmenu

    Envoyé par rofro le 15 Mars 2012 à 17:43
    bonjour a tous . mon problème est dans ce petit programme
    pourriez vous me donner un coup de main (j'ai 63 ans et ouvrier retraité du bâtiment donc je n'ai pas fait de hautes études)

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    from Tkinter import *

    def popmenu(event=None):
    menu.tk_popup(x=700,y=400)

    def ecran():
    r.bind("",popmenu)

    def bouton():
    i,a=5,0
    while i <750:
    Button(r,text=a,width=5,background="blue",foreground="red",activebackground="gray",activeforeground="black",command=question).place(x=i,y=y)
    i=i+70
    a=a+1

    def question():
    global y
    if y <420:
    Label(r,text="je voudrai avec le popmenu changer \
    le texte du bouton sur lequel vous avez cliqué").place(x=10,y=y+30)
    y=y+40

    r=Tk()
    r.geometry("770x510+400+200")
    y=10
    menu = Menu(r)
    menu.add_command(label="popmenu")
    menu['tearoff'] = 0
    Button(r,text="quit",command=r.destroy).place(x=5,y=480)
    ecran()
    bouton()
    r.mainloop()
    • Re: changer text Button avec popmenu

      Envoyé par jacko le 16 Mars 2012 à 14:34
      Bonjour,

      Que voulez-vous faire exactement ?
      Un menu apparaît au clic (droit/gauche ?) sur le bouton et la ligne sélectionnée dans ce menu devient le libellé du bouton ?
      Est-ce bien cela ?

      Note : lorsque vous mettez du code dans votre message, vous pouvez utiliser les balises [ code ] et [ /code ] : ceci permet de conserver les indentations et d'avoir du code plus lisible, comme ceci :


      #!/usr/bin/python
      # -*- coding: utf-8 -*-
      from Tkinter import *

      def popmenu(event=None):
      menu.tk_popup(x=700,y=400)

      def ecran():
      r.bind("",popmenu)

      def bouton():
      i,a=5,0
      while i <750:
      Button(r,text=a,width=5,background="blue",foreground="red",
      activebackground="gray",activeforeground="black",command=question).place(x=i,y=y)
      i=i+70
      a=a+1

      def question():
      global y
      if y <420:
      Label(r,text="je voudrai avec le popmenu changer le texte du bouton sur lequel vous avez clique").place(x=10,y=y+30)
      y=y+40

      r=Tk()
      r.geometry("770x510+400+200")
      y=10
      menu = Menu(r)
      menu.add_command(label="popmenu")
      menu['tearoff'] = 0
      Button(r,text="quit",command=r.destroy).place(x=5,y=480)
      ecran()
      bouton()
      r.mainloop()


    • Re: changer text Button avec popmenu

      Envoyé par rofro le 16 Mars 2012 à 18:48
      bonjour merci pour les précisions

      je voudrai cliquer sur un bouton et ensuite avec le popmenu ouvrir une petite fenêtre
      avec une Entry et que la réponse soit dans le bouton cliqué au paravant

      ex:clique bouton2>>puis>>popmenu>>fenêtre demande légume:réponse =tomate>>>>>>>tomate =afficher tomate dans bouton 2
      comme cela pour tous les boutons
      voila merci j'ai 63 ans mais je suis un débutant en python
      comme vous pouvez le constaterhttp://www.afpy.org/fcIcons/icon7.gif

    • Re: changer text Button avec popmenu

      Envoyé par jacko le 21 Mars 2012 à 11:23
      Bonjour,

      Voici ci-dessous un exemple de la façon de s'y prendre. On définit un nouveau type de fenêtre Popup, dérivé d'une Toplevel standard. Cette Popup contient la zone de saisie Entry. Lorsque l'on clique sur le bouton, on crée cette Popup. Le bouton correspondant bt est passé en argument et stocké (self.bt). L'appui sur la touche "Entrée" est capturé (bind()), et il déclenche la fonction saisie(), qui récupère la valeur saisie dans le Entry et l'affecte au bouton qu'on a stocké. Ensuite la fenêtre est détruite (destroy()).
      focus_set() sert à placer le focus (la zone de saisie) sur le Entry, ce qui évite d'avoir à cliquer dessus.
      grab_set() fait que la Popup est seule active ; le programme principal dessous est inactif (cela évite de pouvoir cliquer sur un autre bouton alors que la Popup est affichée).

      Voila, je vous laisse appliquer à votre programme.

      Bon courage.


      import Tkinter as Tk

      fen=Tk.Tk()

      class Popup(Tk.Toplevel):
      def __init__(self,bt):
      Tk.Toplevel.__init__(self)
      Tk.Label(self,text="Votre menu :").grid(row=1,column=1)
      self.ent=Tk.Entry(self)
      self.ent.grid(row=1,column=2)
      self.ent.bind("",self.saisie)
      self.ent.focus_set()
      self.bt=bt
      self.grab_set()

      def saisie(self,ev):
      val=self.ent.get()
      if val and not val.isspace():
      self.bt.config(text=val)
      self.destroy()

      b=Tk.Button(fen,text="bonjour")
      b.config(command=lambda: Popup(b))
      b.grid()

      fen.mainloop()
Rendu par Ploneboard