Làm thế nào để tạo chỉ số Unity?


25

Tôi quan tâm đến các chỉ số của Unity và tự hỏi liệu có hướng dẫn nào về cách lập trình chúng không. Tôi có thể sử dụng các nguồn của những cái hiện có như là phương sách cuối cùng, nhưng tôi thích cách tiếp cận thân thiện hơn vì kỹ năng lập trình của tôi khá hạn chế.



Kiểm tra câu trả lời này là tốt. Nó mô tả cách tạo chỉ báo hệ thống , có nhiều khả năng hơn chỉ báo ứng dụng. Tôi đã thử nghiệm một chút và cũng xem xét các chỉ số hệ thống mặc định của Unity, như chỉ báo âm thanh và bluetooth; và đưa ra ví dụ của riêng tôi, ScreenToolsTheicator , cũng sử dụng các nút và thanh trượt . Tôi đã chọn C vì các ví dụ của sneetsher là trong C, nhưng cũng có một trình bao bọc C ++ cho GLib (glibmm).
okaresz

Câu trả lời:


21

Tài liệu chỉ báo ứng dụng với các ví dụ và tài liệu API có sẵn tại đây:

Vẫn chưa có hướng dẫn về Chỉ số ứng dụng, nhưng hãy theo dõi để biết thêm nội dung trên phần hướng dẫn của trang web Nhà phát triển ứng dụng:


2
Băng. Tất cả các liên kết này đã lỗi thời và dẫn đến các thông báo 'không tìm thấy trang. Có tài nguyên mới nào tôi có thể tìm thấy không? Nhà phát triển chính thức.ubuntu.com/apps/qml/ cookbook/ Trang web liên kết đến câu hỏi này với Is there any tutorial for programming Unity indicators?tiêu đề.
Daniel W.

Liên kết bị hỏng ở mọi nơi, Xem ApplicationTheicators wiki.ubfox.com/DesktopExperienceTeam/ApplicationTheicators , tham chiếu API của nó dưới dạng HTML trong libappindicator-docgói.
user.dz

1
Có một lỗi được ghi trong tài liệu bị thiếu: bug.launchpad.net/ubuntudeveloperportal/+orms/1317065
Jorge Castro

4

Dưới đây là ví dụ về chỉ báo ứng dụng trong C. Đây là phiên bản "chỉ chỉ báo" (không có cửa sổ) của ví dụ được cung cấp tại Ubuntu Wiki :

#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;
}

Liên kết mang lại 404
Đổ chuông Ø

@ ringø Đã chỉnh sửa câu trả lời của sergej, thêm liên kết làm việc. Thực tế, đó là liên kết giống như trong câu trả lời của Jorge.
Sergiy Kolodyazhnyy

1

Tôi đã thực hiện một hướng dẫn ngắn ở đây để tạo chỉ báo ứng dụng dừng theo dõi trong python: 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
Tôi đã không nhìn vào mã thực tế, nhưng vì một điều: bạn có lỗi thụt lề. Cả ở đây và trong hướng dẫn liên kết.
Jacob Vlijm

Không, có một không gian thụt. . . chỉ một, điều này khiến việc đọc mã trở nên cực kỳ đau đớn và không tuân thủ tiêu chuẩn PEP8 của Python
Sergiy Kolodyazhnyy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.