Birlik göstergeleri nasıl oluşturulur?


25

Birlik göstergelerine ilgi duyuyorum ve onları nasıl programlayacağınıza dair bir öğretici olup olmadığını merak ediyorum. Mevcut kaynakların kaynaklarını son çare olarak kullanabilirim, ancak programlama becerilerim oldukça sınırlı olduğu için daha arkadaşça bir yaklaşım tercih ederim.



Bu cevabı da kontrol edin . Bir uygulama göstergesinden daha fazla olasılığı olan bir sistem göstergesinin nasıl oluşturulacağını açıklar . Biraz denedim ve aynı zamanda ses ve bluetooth göstergesi gibi Unity'nin varsayılan sistem göstergelerine baktım; ve kendi örneğimi, düğmeler ve bir kaydırıcı kullanan ScreenToolsIndicator ile geldi . C'yi seçtim çünkü sneetsher'ın örnekleri C'deydi, fakat GLib için de bir C ++ sargısı var (glibmm).
okaresz

Yanıtlar:


21

Örnekler ve API belgeleriyle birlikte Uygulama Göstergesi dokümantasyonunu burada bulabilirsiniz:

Henüz Uygulama Göstergeleri hakkında henüz bir rehber yok, ancak Uygulama Geliştiricisi sitesinin öğreticiler bölümünde daha fazla içerik için bizi izlemeye devam edin:


2
Çarpmak. Tüm bu bağlantılar eskimiş ve 'sayfa bulunamadı' iletilerine yol açıyor. Bulabileceğim yeni kaynaklar var mı? Resmi developer.ubuntu.com/apps/qml/cookbook/… sitesi bu soruya Is there any tutorial for programming Unity indicators?başlık olarak bakıyor.
Daniel W.

Her yerde kopuk bağlantılar, ApplicationIndicators wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators , libappindicator-docpakette HTML olarak API referansına bakınız .
user.dz

1
Eksik belgelere dosyalanmış bir hata var: bugs.launchpad.net/ubuntudeveloperportal/+bug/1317065
Jorge Castro

4

İşte C'deki bir uygulama göstergesi örneği Bu, Ubuntu Wiki'de verilen örneğin "yalnızca gösterge" sürümüdür (pencere yok) :

#include <libappindicator/app-indicator.h>

static void activate_action (GtkAction *action);

static GtkActionEntry entries[] = {
    {"New",  "document-new",     "_New",  "<control>N",
        "Create a new file",    G_CALLBACK(activate_action)},
    {"Open", "document-open",    "_Open", "<control>O",
        "Open a file",          G_CALLBACK(activate_action)},
    {"Save", "document-save",    "_Save", "<control>S",
        "Save file",            G_CALLBACK(activate_action)},
    {"Quit", "application-exit", "_Quit", "<control>Q",
        "Exit the application", G_CALLBACK(gtk_main_quit)},
};
static guint n_entries = G_N_ELEMENTS(entries);

static const gchar *ui_info =
"<ui>"
"  <popup name='IndicatorPopup'>"
"    <menuitem action='New' />"
"    <menuitem action='Open' />"
"    <menuitem action='Save' />"
"    <menuitem action='Quit' />"
"  </popup>"
"</ui>";

static void activate_action(GtkAction *action)
{
    const gchar *name = gtk_action_get_name (action);
    GtkWidget *dialog;

    dialog = gtk_message_dialog_new(NULL,
                                    GTK_DIALOG_DESTROY_WITH_PARENT,
                                    GTK_MESSAGE_INFO,
                                    GTK_BUTTONS_CLOSE,
                                    "You activated action: \"%s\"",
                                    name);

    g_signal_connect(dialog, "response", 
                     G_CALLBACK(gtk_widget_destroy), NULL);

    gtk_widget_show(dialog);
}

int main(int argc, char **argv)
{
    GtkWidget*      indicator_menu;
    GtkActionGroup* action_group;
    GtkUIManager*   uim;
    AppIndicator* indicator;
    GError* error = NULL;

    gtk_init(&argc, &argv);

    /* Menus */
    action_group = gtk_action_group_new("AppActions");
    gtk_action_group_add_actions(action_group, entries, n_entries,
                                 NULL);

    uim = gtk_ui_manager_new();
    gtk_ui_manager_insert_action_group(uim, action_group, 0);

    if (!gtk_ui_manager_add_ui_from_string(uim, ui_info, -1, &error)) {
        g_message("Failed to build menus: %s\n", error->message);
        g_error_free(error);
        error = NULL;
    }

    /* Indicator */
    indicator = app_indicator_new("example-simple-client",
                                  "go-jump",
                                  APP_INDICATOR_CATEGORY_APPLICATION_STATUS);

    indicator_menu = gtk_ui_manager_get_widget(uim, "/ui/IndicatorPopup");

    app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE);
    app_indicator_set_attention_icon(indicator, "indicator-messages-new");

    app_indicator_set_menu(indicator, GTK_MENU(indicator_menu));

    gtk_main();

    return 0;
}

Link verimi 404
Ring Ø

@ ringø Düzenlendi sergej'in cevabı, çalışma bağlantısını ekledi. Etkili, bu Jorge'nin cevabındakiyle aynı bağlantı.
Sergiy Kolodyazhnyy

1

Python'da bir kronometre uygulaması göstergesi oluşturmak için kısa bir eğitim verdim: http://www.steshadoku.com/blog/2017/elapses-creating-a-unity-stopwatch-indicator-w-python/

import gobject
import gtk
import appindicator
import os, sys
import time
from datetime import timedelta

if __name__ == "__main__":

    saveseconds = 0 #global variable to save how many seconds the clock has run
    dir_path = os.path.dirname(os.path.realpath(__file__))
    source_id = ""

    def on_timer(args=None):
      savetime = int(time.time() - timestart) + saveseconds
      ind.set_label(str(timedelta(seconds=savetime)))
      return True

    def finish(args=None):
        sys.exit()
        return True

    def stoptime(args=None):
        #print(source_id)
        global saveseconds
        saveseconds += int(time.time() - timestart)
        gtk.timeout_remove(source_id)
        return True

    def starttime(args=None):
        global timestart
        timestart = time.time()
        global source_id
        source_id = gtk.timeout_add(1000, on_timer)
            #sets timer to run every 1s
        return True

    def cleartime(args=None):
        global saveseconds
        saveseconds = 0
        ind.set_label(str(timedelta(seconds=0)))
        gtk.timeout_remove(source_id)
        return True

    #format below is category name, icon
    ind = appindicator.Indicator ("simple-clock-client", "hourglass", appindicator.CATEGORY_APPLICATION_STATUS, dir_path)
    ind.set_status (appindicator.STATUS_ACTIVE)
    ind.set_label("Elapses"); #name of program and initial display

    ##Setup Menu Items
    menu = gtk.Menu()

    stop = gtk.MenuItem("Stop")
    stop.connect("activate", stoptime)
    stop.show()
    menu.append(stop)

    start = gtk.MenuItem("Start")
    start.connect("activate", starttime)
    start.show()
    menu.append(start)

    clear = gtk.MenuItem("Clear")
    clear.connect("activate", cleartime)
    clear.show()
    menu.append(clear)

    exit = gtk.MenuItem("Exit")
    exit.connect("activate", finish)
    exit.show()
    menu.append(exit)

    ind.set_menu(menu) #set the menu with added items
    gtk.main()

1
Gerçek koda bakmadım ama bir şey için: çentik hataları var. Hem burada hem de bağlantılı derste.
Jacob Vlijm

Hayır, bir tane girinti alanı var. . . kodu okumanızı kesinlikle acı veren ve Python'un PEP8 standardına uymayan tek bir tane
Sergiy Kolodyazhnyy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.