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 :

Présentation de Menu sous GTK


Sujet :

GTK+ avec Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Retraité de l'Informatique
    Inscrit en
    Août 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité de l'Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2019
    Messages : 36
    Points : 35
    Points
    35
    Par défaut Présentation de Menu sous GTK
    Bonjour,
    J'ai un programme assez complexe pour lequel j'ai une différence de présentation suivant l'OS. Je me suis donc inspiré d'un exemple pour reproduire le phénomène dans un code simplifié à l'extrême. Voici donc mes éléments.

    J'utilise la fonction Gio.menu pour créer un menu. Mais dans un OS (Mint 20.2), l'item "Application" apparaît bien alors que sur l'autre OS (Manjaro), je n'ai qu'une petite icône qui ressemble à rien. Pire, si je change de thème (dark) l'icône n'est plus visible.
    Voici le code de mon test
    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
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    # I use this exemple: https://developer.gnome.org/gnome-devel-demos/stable/gmenu.py.html.en
    import sys, gi
    try:
    	gi.require_version('Gtk', '3.0')
    except:
    	print('[E] wrong Gtk version')
    	exit()
    from gi.repository import Gtk
    from gi.repository import Gio
     
    class MyWindow(Gtk.ApplicationWindow):
    	def __init__(self, app):
    		Gtk.Window.__init__(self, title="GMenu Example", application=app)
     
    class MyApplication(Gtk.Application):
    	def __init__(self):
    		Gtk.Application.__init__(self)
    	def do_activate(self):
    		win = MyWindow(self)
    		win.show_all()
    	def do_startup(self):
    		# start the application
    		Gtk.Application.do_startup(self)
    		# create a menu
    		menu = Gio.Menu()
    		# append to the menu one option
    		menu.append("Quit", "app.quit")
    		# set the menu as menu of the application
    		self.set_app_menu(menu)
    		# option "quit"
    		quit_action = Gio.SimpleAction.new("quit", None)
    		quit_action.connect("activate", self.quit_cb)
    		self.add_action(quit_action)
    	# callback function for "quit"
    	def quit_cb(self, action, parameter):
    		self.quit()
     
    app = MyApplication()
    exit_status = app.run(sys.argv)
    sys.exit(exit_status)
    Résultat sur Mint
    Nom : MenuMint.png
Affichages : 357
Taille : 5,6 Ko
    Résultat sur Manjaro
    Nom : MenuManjaro.png
Affichages : 346
Taille : 7,7 Ko
    Résultat sur Manjaro thème foncé (Dark)
    Nom : MenuManjaroDark.png
Affichages : 347
Taille : 13,1 Ko

    On voit bien que la présentation est différente (ligne application présente ou pas) et que d'un côté on a du texte, de l'autre une icône.
    Avez-vous une piste ?
    Merci
    .

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    J’ai l’impression que le problème vient du gestionnaire de bureau utilisé. Es-tu sous le même bureau sous les différents OS ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Retraité de l'Informatique
    Inscrit en
    Août 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité de l'Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2019
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Bonjour,

    J’ai l’impression que le problème vient du gestionnaire de bureau utilisé. Es-tu sous le même bureau sous les différents OS ?
    Bonjour,
    En effet, Cinnamon sur Mint et Gnome sous Manjaro. Et pour Manjaro je suis en version 40 pour GnomeApp.
    Mais je crois savoir que les deux sont développés sout GTK+ (sans en être sûr).
    Et je crois me souvenir que dans une ancienne version de Manjaro je n'avais pas le problème. Je vais creuser dans ce sens (en bootant sur une Live par exemple).
    A SUIVRE...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Retraité de l'Informatique
    Inscrit en
    Août 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité de l'Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2019
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Bonjour,

    J’ai l’impression que le problème vient du gestionnaire de bureau utilisé. Es-tu sous le même bureau sous les différents OS ?
    Bonsoir,
    J'ai donc avancé dans mes investigations.
    Sur un Gnome récent (3.38.4 de Pop!Os 20.4) le problème n’apparaît pas.
    Sur un xfce de la dernière Manjaro non plus.
    Par contre sur une LiveUSB de Manjaro Gnome toujours le même soucis.
    Et sur ma distribution installée sur laquelle j'ai appliqué une mise à jour qui a téléchargé 1,8 Go - excusez du peu, Rolling release oblige), je suis en Full Gnome 40 et le problème subsiste.
    Un ami m'a conseillé de passer la définition de mon menu en XML mais je vais creuser encore un peu car le menu en question est simple et ne comporte que 7 items.

    Si en temps vous avez une idée ... (les routines Python GTK sont pré-installées avec l'OS, je n'ai pas de moyen simple de vérifier leur n° de release).

    A SUIVRE...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Retraité de l'Informatique
    Inscrit en
    Août 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité de l'Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2019
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    Ne trouvant pas de solution de correction immédiate, j'ai appliqué cette solution de contournement en détachant la description du menu dans un fichier XML. Cette solution fonctionne bien, même si je trouve que la toute petite utilité de mon menu ne nécessitait pas de sortir une si grosse artillerie.
    Je reste persuadé que mon erreur de présentation est liée à la nouvelle version Gnome 40, même si j'ai fait en sorte de vérifier au début de mon programme que j'interfaçais bien avec les routines de la V3 de GTK. La version V4 de GTK y serait-elle aussi pour quelque chose ?
    En tous les cas, si vous me le permettez, je laisse ce post ouvert le temps que je cible mieux le fautif en installant un OS sous Gnome et en le faisant évoluer le bureau en version 40.
    Une autre piste serait aussi que les thèmes mais j'ai testé sur une version Manajro toute propre avec le thème par défaut pour y retrouver l'icône incompréhensible rapportée dans une de mes copies d'écran.
    Donc je laisse ouvert pour compléter.
    Et si quelqu'un a une idée...
    Cdlt
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?>
    <interface>
    	<menu id="menubar">
    		<submenu>
    			<attribute name="label">File</attribute>
    			<section>
    				<item>
    					<attribute name="label">Quit</attribute>
    					<attribute name="action">app.quit</attribute>
    				</item>
    			</section>
    		</submenu>
    	</menu>
    </interface>
    Partie de code python pour intégrer le ficher XML (inspiré du lien plus haut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            # a builder to add the UI designed with Glade to the grid:
            builder = Gtk.Builder()
            # get the file (if it is there)
            try:
                builder.add_from_file("Test4.ui")
            except:
                print("file not found")
                sys.exit()
     
            # we use the method Gtk.Application.set_menubar(menubar) to add the menubar
            # and the menu to the application (Note: NOT the window!)
            self.set_menubar(builder.get_object("menubar"))
            self.set_app_menu(builder.get_object("appmenu"))

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Retraité de l'Informatique
    Inscrit en
    Août 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité de l'Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2019
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Bonsoir,
    Le problème vient en fait de deux choses:
    - Manjaro, dans son optimisation de Gnome 40, a mis un logo dans la barre d'entête de la fenêtre pour certains menus (dont le menu Python) afin d'optimiser de la place (cf l'imlage 1 sous Mint Cinnamon qui laisse apparaitre le texte application alors que l'image 2 sous Gnome Manjaro l'a remplacée par un logo en haut à gauche)
    - j'ai un thème spécifique chargé sur le site gnome-look.org. Celui que j'ai choisi (Nordic) ne présente pas le nouveau logo (im 3) alors qu'un thème livré en standard le propose (im 2)
    Donc voilà. Ce n'était ni un problème Python, ni un problème Gnome, mais un problème de thème.
    J'ai ouvert un problème (issue) sur le site Github de l'éditeur.
    Merci aux contributeurs.
    Je ferme

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 110
    Points : 4 465
    Points
    4 465
    Par défaut
    bonjour

    répondu sur autre forum

    Que désires tu faire ? ton code exemple est pour ajouter un menu système et non une barre de menu
    Si tu désires ajouter une barre de menu il ne faut pas utiliser le set_app_menu() de l'exemple mais set_menubar()
    voir la doc

    et si tu désires bien ajouter un menu système alors oui, il y a des différences entres les versions (thèmes - et sans doute aussi gtk)
    set_app_menu() n'existe plus avec gtk4
    $moi= ( !== ) ? : ;

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Retraité de l'Informatique
    Inscrit en
    Août 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité de l'Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2019
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par papajoker Voir le message
    bonjour

    répondu sur autre forum

    Que désires tu faire ? ton code exemple est pour ajouter un menu système et non une barre de menu
    Si tu désires ajouter une barre de menu il ne faut pas utiliser le set_app_menu() de l'exemple mais set_menubar()
    voir la doc

    et si tu désires bien ajouter un menu système alors oui, il y a des différences entres les versions (thèmes - et sans doute aussi gtk)
    set_app_menu() n'existe plus avec gtk4
    Mon but a toujours été de mettre un menu Système. C'est la modification de présentation qui m'a perturbé.
    Le thème que j'utilisais est bien le déclencheur de mes recherches.
    Je prends en compte le fait que le menu système risque de disparaître en GTK4. Mais sûrement avec d'autres routines. Je regarderai donc.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de sous menu dynamique [GTK+/C]
    Par DevMg dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 28/09/2008, 20h00
  2. Question présentation: Reduire un sous-formulaire
    Par marie10 dans le forum Access
    Réponses: 4
    Dernier message: 06/02/2006, 16h54
  3. pbl menu sous ie et ff
    Par pp51 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 11/12/2005, 09h56
  4. [Debutant] Menu sous IE et fonction Javascript
    Par Pepito dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/11/2005, 17h59
  5. Menu / Sous Menu
    Par lenouvo dans le forum MFC
    Réponses: 5
    Dernier message: 27/10/2004, 15h50

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