วิธีการสร้างตัวบ่งชี้ Unity


25

ฉันสนใจตัวชี้วัดความสามัคคีและสงสัยว่ามีการสอนเกี่ยวกับวิธีการเขียนโปรแกรมพวกเขา ฉันสามารถใช้แหล่งที่มาของสิ่งที่มีอยู่เป็นทางเลือกสุดท้าย แต่ฉันต้องการวิธีการที่เป็นมิตรมากกว่าเพราะทักษะการเขียนโปรแกรมของฉันค่อนข้าง จำกัด


ลิงค์ที่เกี่ยวข้อง: askubuntu.com/q/46746/17789 askubuntu.com/q/46761/17789
con-f-use

ลองดูคำตอบนี้เช่นกัน มันอธิบายถึงวิธีการสร้างตัวบ่งชี้ระบบซึ่งมีความเป็นไปได้มากกว่าตัวบ่งชี้แอพ ฉันทดลองเล็กน้อยและดูที่ตัวบ่งชี้ระบบเริ่มต้นของ Unity เช่นเสียงและตัวบ่งชี้บลูทู ธ และมาพร้อมกับตัวอย่างของตัวเองScreenToolsIndicatorซึ่งใช้ปุ่มและตัวเลื่อนเช่นกัน ฉันเลือก C เพราะตัวอย่างของ sneetsher อยู่ใน C แต่มี C ++ wrapper สำหรับ GLib เช่นกัน (glibmm)
okaresz

คำตอบ:


21

แอปพลิเคชันตัวบ่งชี้เอกสารพร้อมตัวอย่างและเอกสาร API มีอยู่ที่นี่

ยังไม่มีบทช่วยสอนเกี่ยวกับตัวบ่งชี้แอปพลิเคชัน แต่ยังคงติดตามเนื้อหาเพิ่มเติมในส่วนบทแนะนำของเว็บไซต์ App Developer:


2
Bump ลิงก์ทั้งหมดเหล่านี้ล้าสมัยและนำไปสู่ข้อความ 'ไม่พบหน้าเว็บ' มีทรัพยากรใหม่ที่ฉันสามารถหาได้หรือไม่? developer.ubuntu.com/apps/qml/cookbook/เว็บไซต์อย่างเป็นทางการเชื่อมโยงไปยังคำถามนี้ด้วยIs there any tutorial for programming Unity indicators?ชื่อเป็น
Daniel W.

ลิงก์เสียทุกที่ดู ApplicationIndicators wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicatorsอ้างอิง API เป็น HTML ในlibappindicator-docแพ็คเกจ
user.dz

1
มีข้อผิดพลาดที่ยื่นในเอกสารที่ขาดหายไป: bugs.launchpad.net/ubuntudeveloperportal/+bug/1317065
Jorge Castro

4

นี่คือตัวอย่างตัวบ่งชี้แอปใน C นี่เป็นเวอร์ชั่น "ตัวบ่งชี้เท่านั้น" (ไม่มีหน้าต่าง) ของตัวอย่างที่มีให้ที่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;
}

ลิงก์อัตราผลตอบแทน 404
แหวนØ

@ ringøแก้ไขคำตอบของ sergej เพิ่มลิงก์ที่ใช้งานได้ ได้อย่างมีประสิทธิภาพมันเป็นลิงค์เดียวกับในคำตอบของ Jorge
Sergiy Kolodyazhnyy

1

ฉันทำแบบฝึกหัดสั้น ๆ ที่นี่เพื่อสร้างตัวบ่งชี้แอพหยุดดูใน python: http://www.steshadoku.com/blog/2017/elapses-creating-a-unity-stopwatch-indicator-w-python/ http://www.steshadoku.com/

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
ฉันไม่ได้ดูรหัสจริง แต่อย่างหนึ่ง: คุณมีข้อผิดพลาดในการเยื้อง ทั้งที่นี่และในบทช่วยสอนที่เชื่อมโยง
Jacob Vlijm

ไม่มีการเว้นวรรคหนึ่งช่อง . . เพียงหนึ่งเดียวซึ่งทำให้เจ็บปวดอย่างมากในการอ่านรหัสและไม่เป็นไปตามมาตรฐาน PEP8 ของ Python
Sergiy Kolodyazhnyy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.