Por que meu applet periquito não é exibido no painel do periquito?

1

Estou escrevendo um applet para o Ubuntu Budgie em python. Eu escrevi um código, depurei sem erros, salvei e coloquei a pasta com os arquivos no diretório ~ / .local / share / budgie-desktop / plugin para que eu pudesse adicioná-lo no painel.Eu tentei adicioná-lo como um applet, mas nada aconteceu.Então eu não tenho certeza se está funcionando sem problemas ou não. O código está neste link

link

#!/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()

O applet é sobre um botão no painel que toda vez que eu pressiono ele abre um menu suspenso com algumas opções que podem ser ativadas. Como o "user-indicator-applet".

Agora estou empilhado e não posso continuar o código. Qualquer ajuda será apreciada. Agradecemos antecipadamente.

    
por cgiannakisis 15.03.2018 / 00:11

1 resposta

2

Eu vejo um erro de digitação!

def do_get_panel_widged(self, uuid):

Deve ser:

def do_get_panel_widget(self, uuid):

O que está acontecendo é que a versão do typo está apenas definindo uma função. Implicitamente do_get_panel_widget está sendo chamado, mas é uma função stub para que o applet nunca apareça.

Com o nome correto - agora você está substituindo a função stub inbuilt e chamando seu novo código de applet.

Em segundo lugar, no seu exemplo, você está perdendo um arquivo .plugin - você precisa disso para permitir que o módulo seja executado. O arquivo do plugin é este formato:

[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

Em terceiro lugar:

Não tem um Gtk.main () no final do seu módulo principal - que apenas confunde um plugin baseado em Peas - delete ele

Quarto:

Use um Gtk.EventBox () para adicionar seu applet - é como os plugins 10.4 do budgie-desktop devem ser escritos - código de exemplo abaixo

    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):

Quinto:

Observe que o evento button_clicked está sem um argumento - eventos clicados no GTK passam o próprio botão para o manipulador de sinal

Por último - o que eu não tenho corrigido para você - sua função clicada tem uma caixa de diálogo não inicializada - e você parece querer exibir uma caixa de diálogo Gtk. Não! Você irá bloquear o thread principal do painel.

    
por fossfreedom 15.03.2018 / 11:53