web-dev-qa-db-ja.com

バッジーアプレットがバッジーパネルに表示されないのはなぜですか?

私はpythonでUbuntu Budgieのアプレットを書いています。エラーを出さずにデバッグし、それを保存し、〜/ .local/share/budgie-desktop/pluginディレクトリにファイルのあるフォルダーを追加します。 panel。私はアプレットとしてそれを追加しようとしましたが、何も起こりませんでしたので、スムーズに実行されているかどうかはわかりません。コードはこのリンクにあります

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

アプレットはパネル内のボタンについてであり、このボタンを押すたびに、アクティブ化できるオプションを含むドロップダウンメニューが開きます。「user-indicator-applet」のように。

今私はスタックされており、コードを続行することはできません。前もって感謝します。

1
cgiannakisis

タイプミスを見つけました!

def do_get_panel_widged(self, uuid):

そのはず:

def do_get_panel_widget(self, uuid):

何が起こっているのかは、タイプミス版が単に関数を定義しているということです。暗黙的にdo_get_panel_widgetが呼び出されていますが、これはスタブ関数であるため、アプレットは表示されません。

正しい名前で-組み込みスタブ関数をオーバーライドし、新しいアプレットコードを呼び出しています。

次に、例では.pluginファイルが欠落しています。これは、モジュールを実行できるようにするために必要です。プラグインファイルは次の形式です。

[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

第三に:

メインモジュールの最後にGtk.main()を持たないでください-Peasベースのプラグインを混乱させるだけです-削除してください

第4:

Gtk.EventBox()を使用してアプレットを追加します-これは、budgie-desktop 10.4プラグインの記述方法です-以下のコード例

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

5番目:

Button_clickedイベントに引数がないことに注意してください-GTKでクリックされたイベントは、ボタン自体をシグナルハンドラに渡します

最後に-私はあなたのために修正していない-あなたのクリックされた機能には初期化されていないダイアログがあります-そしてあなたはGtkダイアログを表示したいようです。しないでください!パネルのメインスレッドをブロックします。

2
fossfreedom