Avrei bisogno di un consiglio... sto programmando con gtk, e vorrei sapere, come posso creare un pannello di systema? ho visto un po su internet... ma tutto si riferisce per conky e non per gtk... qualcuno sa darmi un consiglio??

chiesto 23 Mar '16, 15:46

sciamano's gravatar image

sciamano
1025

Di preciso cosa intendi con "pannello di sistema"?
Tipo il Monitor di Sistema?

(23 Mar '16, 20:07) dadexix86 ♦♦ dadexix86's gravatar image

Praticamente sto creando un Terminale con vte... sotto la finestra term, vorrei aggiungere una label che mi indica: uso della cpu, ram, gpu ecc... però non so come usare il file proc/cpuinfo con gtk o se gtk usa delle sue variabili??...

ps: è più facile lavorare con il terminale che con la grafica... >.<

(23 Mar '16, 23:18) sciamano sciamano's gravatar image

Mah, quel file lo puoi leggere come qualsiasi file. Sinceramente io userei python, dato che in questo linguaggio è semplicissimo leggere un file. Guarda ad esempio questa risposta su AskUbuntu in cui viene spiegato come leggere un file e printarlo in un TextView.

Detto questo, secondo me la cosa migliore è che chiedi su StackOverflow, che è un sito di Q&A (in inglese) dedicato interamente alla programmazione.

(24 Mar '16, 09:31) dadexix86 ♦♦ dadexix86's gravatar image

Tra l'altro non hai detto quale linguaggio stai usando per programmare con le GTK :)

(24 Mar '16, 11:17) dadexix86 ♦♦ dadexix86's gravatar image

Già "scusami". Sono un vecchio vecchissimo fanatico del linguaggio C, ho anche praticato molti linguaggi nella mia storia ma, sono sempre rimasto appassionato del C... appunto, dicendo gtk l'ho dato per scontato che parlavo del C... ho anche usato python... ma voglio il mio C :) cmq, chiedo su StackOverflow... perché penso che gtk avrà dei suoi metodi tipo come fa conky...

(24 Mar '16, 15:17) sciamano sciamano's gravatar image

Ad esempio, ho usato questa funzione per aggiornare l'indirizzo della directory in uso dal terminale in una label...

g_object_bind_property(G_OBJECT(obj.term), "window-title", G_OBJECT(obj.label), "label", G_BINDING_DEFAULT);

È anche vero che posso fargli aprire un file con il metodo che offre il C... ma i file di informazioni cambiano ogni x tempo... e sicuramente non posso usare un ciclo di lettura, perché gtk ha già il suo ciclo: gtk_main()...

vabbe, vado avanti con la speranza, per trovare un metodo...:)

(24 Mar '16, 15:19) sciamano sciamano's gravatar image

Mh... Ho spulciato un attimo il codice del Monitor di Sistema di Gnome, loro usano una chiamata a systemd per avere le info sulla CPU. Potrebbe valer la pena seguire la loro idea ed investigare su come fanno le cose loro.

(24 Mar '16, 15:34) dadexix86 ♦♦ dadexix86's gravatar image

Si ho visto... header che usa "per quanto ho visto io" è glibtop.h...

Sarebbe bene "se esiste" usare una proprietà con intervalli di tempo che provoca la partenza di una funzione??

ad esempio: g_signal_connect(G_OBJECT(obj), "tempo di ticket", G_CALLBACK(mia_fun), NULL);

(24 Mar '16, 19:59) sciamano sciamano's gravatar image

Ottimo! allora se ti andasse di aggiungere una risposta un po' più dettagliata e accettarla sarebbe meglio :)

(24 Mar '16, 22:30) dadexix86 ♦♦ dadexix86's gravatar image

devo pubblicare un pezzo di codice?

(25 Mar '16, 14:43) sciamano sciamano's gravatar image

Se ti va sì, e anche commentarlo :)

Sennò anche solo spiegare come sei arrivato a quella risposta e come l'hai adattata alla tue esigenze è più che sufficiente.

(25 Mar '16, 14:55) dadexix86 ♦♦ dadexix86's gravatar image

si! okk! :)

(25 Mar '16, 15:31) sciamano sciamano's gravatar image

Posto il risultato di ciò che ho chiesto... farò un esempio di come visualizzare il risultato di un comando shell in una label... ps: ad esempio l'output del comando: date, per visualizzare l'ora in una label... allo stesso modo poi vale anche per i comandi free, fdisk, mpstat, ifconfig ecc... premetto che: se qualcuno ha soluzioni migliori delle mie... ne sarei molto contento... io sono un principiante per quanto riguarda la grafica sturata! :(

cmq il mio codice:

/* file header mio */ 
#include "main.h"

/* Prototipo della funzione che riguarda la mia domanda*/

gboolean label_orologio(gpointer data);

int main(int argc, char **argv)

{

gtk_init(&argc, &argv);

/* carico le variabili nella struct VAR obj */  
    Dichiaro_le_variabili(&obj);

/* funzione per le impostazioni della finestra principale */  
    struttura_finestra(obj.win);

/* funzioni per le impostazioni del terminale. lib usata: vte-2.91 */
    vte_terminal_option(obj.term);

      /* nome per lo style */  
    gtk_widget_set_name(GTK_WIDGET(obj.label[0]),
    "l1");

      /* carico la label[0] nel box */  
    gtk_box_pack_start(GTK_BOX(obj.box[1]), obj.label[0], FALSE, FALSE, 0);

      /* carico la finestra terminale
    nel box */  
    gtk_box_pack_start(GTK_BOX(obj.box[1]), obj.term, FALSE, FALSE, 0);

      /* nome per lo style */  
    gtk_widget_set_name(GTK_WIDGET(obj.label[1]),
    "l2");

      /* carico la label[0] nel box */  
    gtk_box_pack_end(GTK_BOX(obj.box[1]),
    obj.label[1], FALSE, FALSE, 0);

      /* carico il box nella finestra */
    gtk_container_add(GTK_CONTAINER(obj.win),
    obj.box[1]);

      /* eventi di chiusura */  
    g_signal_connect(G_OBJECT(obj.win),
    "destroy", G_CALLBACK(destroy),
    NULL);  
    g_signal_connect(G_OBJECT(obj.term),
    "child-exited", G_CALLBACK(destroy),
    NULL);

      /* aggiorna e visualizza il
    percorso della directory in cui è
    posizioato il terminale */  
    g_object_bind_property(G_OBJECT(obj.term),
    "window-title",
                             G_OBJECT(obj.label[0]), "label",
                             G_BINDING_DEFAULT);

      /* funzione per lo stile */  
    stylcss3();

      gtk_widget_show_all(obj.win);

    /* funzione che fa partire la funzione ogni x_tempo */  
    g_timeout_add_seconds(1,label_orologio, obj.label[1]);

      gtk_main();

      return 0; }

    char str[256];

    /* definizione orologio */ gboolean
    label_orologio(gpointer data) {  
    FILE *f;   f = popen("date | awk
    '{print $5}' | sed 's/,//g'", "r"); 
    memset(&str, 0x0, 256);   fgets(str,
    255, f);   pclose(f);  
    gtk_label_set_label(data, str);  
    return TRUE;
}

ancora non sono sicuro se è un bene usare la funzione "popen"... perché credo che bisognerebbe usare una libreria tipo ctype o stat??!! per ora cosi funziona... Se qualcuno ha soluzioni migliori "come detto" sarei contento ;)

coll. permanente

ha risposto 25 Mar '16, 19:45

sciamano's gravatar image

sciamano
1025

modificato 26 Mar '16, 11:52

dadexix86's gravatar image

dadexix86 ♦♦
16.9k816161

La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×6

domanda posta: 23 Mar '16, 15:46

domanda visualizzata: 313 volte

ultimo aggiornamento: 26 Mar '16, 11:52

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.