web-dev-qa-db-fra.com

Pourquoi mon applet de perruche ne s'affiche-t-il pas dans le tableau de bord?

J'écris un applet pour Ubuntu Budgie en python.J'ai écrit du code, débogué sans erreur, je l'ai sauvegardé et mis le dossier avec les fichiers dans le répertoire ~/.local/share/budgie-desktop/plugin afin que je puisse l'ajouter J'ai essayé de l'ajouter en tant qu'applet, mais rien ne s'est passé. Je ne suis donc pas sûr que tout se passe bien ou pas. Le code est dans ce lien

https://Gist.github.com/cgiannakidis70/db0cf31558e6c20e95716679b831fd8f

#!/usr/bin/env python3

import os
import gi
import gi.repository
gi.require_version('Budgie', '1.0')
from gi.repository import Budgie, GObject, Gtk, Gio

class myapplet(GObject.GObject, Budgie.Plugin):

    __gtype_name__ = "myapplet"

    def __int__(self):

        GObject.GObject.__init__(self)

    def do_get_panel_widged(self, uuid):

        return myappletApplet(uuid)

class myappletApplet(Budgie.Applet):

    def __init__(self, uuid):

        Budgie.Applet.__init__(self)

        self.button = Gtk.ToggleButton.new("A")
        self.button.set_relief(Gtk.ReliefStyle.NONE)
        self.button.set_active(False)
        self.button.set_tooltip_text("Apple Menu")
        self.add(self.button)
        self.button.connect("clicked", self.button_clicked)
        self.show_all()

    def button_clicked(self):

        dialog = menu(self)
        response = dialog.run()

        dialog.destroy()

        #Create Menu
        menu = Gio.Menu()
        menu.append("About This PC", "app.about_this_pc")
        self.set_applet_menu(menu)

        #create an action for the option "About This PC" of the menu
        about_this_pc_action = Gio.SimpleAction.new("about_this_pc", None)
        about_this_pc_action.connect("activate", self.about_this_pc_cb)
        self.add_action(about_this_pc_action)



    def about_this_pc_cb(self, action, parameter):

        print("About This PC")




Gtk.main()

L'applet concerne un bouton dans le panneau qui, chaque fois que je l'y appuie, ouvre un menu déroulant avec certaines options qui peuvent être activées.Comme le "applet-indicateur-utilisateur".

En ce moment je suis empilé et je ne peux pas continuer le code. Toute aide sera appréciée. Merci d'avance.

1
cgiannakisis

Je repère une faute de frappe!

def do_get_panel_widged(self, uuid):

CA devrait etre:

def do_get_panel_widget(self, uuid):

Ce qui se passe, c'est que la version de frappe ne fait que définir une fonction. Do_get_panel_widget est implicitement appelé, mais il s'agit d'une fonction de stub, de sorte que l'applet n'apparaîtra jamais.

Avec le nom correct, vous remplacez maintenant la fonction stub intégrée et appelez votre nouveau code d'applet.

Deuxièmement, dans votre exemple, il manque un fichier .plugin - vous en avez besoin pour permettre au module de s'exécuter. Le fichier plugin est ce format:

[Plugin]
Loader=python3
Module=test
Name=test
Description=test description
Authors=your name
Copyright=© 2018 email address
Website=https://your-website.com
Icon=we-prefer-symbolic-icons-symbolic

Troisièmement:

Ne pas avoir Gtk.main () à la fin de votre module principal - cela confond simplement un plugin basé sur Peas - supprimez-le

Quatrième:

Utilisez un Gtk.EventBox () pour ajouter votre applet - c’est ainsi que les plugins budgie-desktop 10.4 doivent maintenant être écrits - exemple de code ci-dessous

    self.button = Gtk.ToggleButton.new()
    self.button.set_relief(Gtk.ReliefStyle.NONE)
    self.button.set_active(False)
    self.button.set_tooltip_text("Apple Menu")
    box = Gtk.EventBox()
    box.add(self.button)
    self.add(box)
    self.button.connect("clicked", self.button_clicked)
    box.show_all()
    self.show_all()

def button_clicked(self, *args):

Cinquième:

Remarquez qu'il manque un argument à l'événement button_clicked - les événements cliqués dans GTK transmettent le bouton lui-même au gestionnaire de signaux

Enfin - ce que je n’ai pas corrigé pour vous - votre fonction cliquée contient une boîte de dialogue non initialisée - et vous semblez vouloir afficher une boîte de dialogue Gtk. Non! Vous allez bloquer le fil principal du panneau.

2
fossfreedom