Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tkinter : modification menu

Changer la forme d'un des sous-menus ajouté avec add_command()

    17 septembre 2020 à 11:12:13

    Bonjour,

    Je suis coincé sur Tkinter en gros je voudrais à un moment dans mon appli que je puisse changer la forme d'un des sous-menus ajouté avec add_command().

    J'arrive juste à modifier l'ensemble.

    De plus je ne comprends pas pourquoi je peux changer la couleur avec l'option 'foreground' via config() mais que je ne puisse pas utiliser l'option 'state' qui pourtant existe dans add_command() ...

    Un exemple :

    #coding:utf-8
    
    from tkinter import *
    from tkinter.font import *
    import random
    
    def hide_all_frame():
        """
        Permet de réinitialiser les frames
        """
        for widget in frame1.winfo_children():
            widget.destroy()
    
        for widget in frame2.winfo_children():
            widget.destroy()
    
        for widget in frame3.winfo_children():
            widget.destroy() 
    
    def center(app,x,y):
    	"""
    	Permet de lancer l'application au centre de l'écran
    	"""
    	screen_x = int(app.winfo_screenwidth())
    	screen_y = int(app.winfo_screenheight())
    	window_x = x
    	window_y = y
    
    	posX = (screen_x // 2) - (window_x // 2)
    	posY = (screen_y // 2) - (window_y // 2)
    
    	geo = "{}x{}+{}+{}".format(window_x, window_y, posX, posY)
    	app.geometry(geo)
    
    
    def color():
    	listColor = ["red", "green", "blue", "yellow", "purple", "magenta","cyan"]
    	nb = random.randint(0,6)
    	first_menu.config(foreground=listColor[nb])
    	print("Couleur des menus : {} !\n".format(listColor[nb]))
    	try:
    		first_menu.config(state=ACTIVE)
    	except Exception as e:
    		print("Option state introuvable ???\nPourtant j'ai bien réussi à désactiver un menu avec 'state=DISABLED'")
    		print("Erreur: {}\n".format(e))
    
    
    def menu1():
    	hide_all_frame()
    	frame1.pack(fill="both", expand=1)
    	frame1.update_idletasks() #Permet de s'adapter à la même taille que la fenêtre principale
    	fontStyle = Font(family="Lucida Grande", size=13)
    	label = Label(frame1, text="Changer la couleur des menus", font=fontStyle).place(relx=0.5, rely=0.4, anchor=CENTER)
    	button= Button(frame1, text="Press me", command=color)
    	button.place(relx=0.5, rely=0.5, anchor=CENTER)
    
    
    def menu2():
    	hide_all_frame()
    	frame1.pack(fill="both", expand=1)
    	frame1.update_idletasks() #Permet de s'adapter à la même taille que la fenêtre principale
    	fontStyle = Font(family="Lucida Grande", size=13)
    	label_num_surete = Label(frame1, text="Bonjour, moi c'est toto", font=fontStyle).place(relx=0.5, rely=0.4, anchor=CENTER)
    
    def menu3():
    	hide_all_frame()
    	frame1.pack(fill="both", expand=1)
    	frame1.update_idletasks() #Permet de s'adapter à la même taille que la fenêtre principale
    	fontStyle = Font(family="Lucida Grande", size=13)
    	label_num_surete = Label(frame1, text="Bloqué !", font=fontStyle).place(relx=0.5, rely=0.4, anchor=CENTER)
    
    
    app = Tk()
    app.title("Application")
    center(app,800,600)
    app.resizable(width=0, height=0) #empêche de modifier la taille de la fenêtre
    
    
    frame1 = Frame(app)
    frame2= Frame(app)
    frame3 = Frame(app)
    
    style_menu_principal = Font(family="Lucida Grande", size=18)
    style_menu = Font(family="Lucida Grande", size=13)
    
    mainmenu = Menu(app)
    first_menu = Menu(mainmenu, tearoff=0)
    first_menu.add_command(label="menu couleur", command=menu1, font=style_menu)
    first_menu.add_command(label="menu toto", command=menu2, font=style_menu)
    first_menu.add_command(label="menu bloqué", state=DISABLED, command=menu3, font=style_menu) #state existe bien ?!
    mainmenu.add_cascade(label="Menu principal", menu=first_menu, font=style_menu_principal)
    app.config(menu=mainmenu)
    
    app.mainloop()



    -
    Edité par AbcAbc6 17 septembre 2020 à 11:18:34

    • Partager sur Facebook
    • Partager sur Twitter
      30 septembre 2020 à 19:03:02

      Merci pour ta réponse.

      J'ai un autre problème mais sur Windows via les 2 lignes de mon code:

      83  style_menu_principal = Font(family="Lucida Grande", size=18)
      91  mainmenu.add_cascade(label="Menu principal", menu=first_menu, font=style_menu_principal)
      

      Je n'arrive pas à changer la police de mon menu principal, il reste tout petit.

      Sur Linux la modification se fait sans soucis !

      • Partager sur Facebook
      • Partager sur Twitter
        1 octobre 2020 à 10:10:14

        Vérifie que la police Lucida Grande soit présente sur ton PC (sur le mien, elle n'y est visiblement pas)

        Sous win10, il faut aller dans les paramètres > personnalisation > Polices, tape le nom de la police dans la zone de recherche et tu verras si elle est présente.

        • Partager sur Facebook
        • Partager sur Twitter
          1 octobre 2020 à 14:46:35

          Même en mettant une police de Windows y'a pas de changement...

          • Partager sur Facebook
          • Partager sur Twitter
            1 octobre 2020 à 18:27:34

            A priori, c'est Windows qui prend le dessus sur la fonte du menu principal
            • Partager sur Facebook
            • Partager sur Twitter
              1 octobre 2020 à 21:09:18

              Donc Tkinter n'est pas totalement cross-platform ?

              La seule solution que j'ai trouvé c'est d'utiliser la fonctionnalité de Windows "Agrandir le texte".

              Le problème c'est que ça agrandit tout sur mon OS...

              Y'a pas une solution qui permet de modifier juste l'application Tkinter ?

              -
              Edité par MerguezLobby 1 octobre 2020 à 22:12:09

              • Partager sur Facebook
              • Partager sur Twitter
                2 octobre 2020 à 15:51:53

                j'ai cru lire que PySimpleGUI (https://pypi.org/project/PySimpleGUI/) pouvait le faire mais je n'ai pas creusé
                • Partager sur Facebook
                • Partager sur Twitter

                Tkinter : modification menu

                × 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