Notizia:
  • Rilasciata Precise Pangolin 12.04. Per ottenerla, visitate questa pagina, oppure provate il tour dal vivo con un browser web moderno.
  • Nuovo forum di Ubuntu-it, l'annuncio. È consigliato aggiornare il proprio profilo e controllare la sezione Gruppo Forum per problemi noti.
  • Rilasciata la versione italiana di Precise Pangolin 12.04. Per maggiori informazioni, consultare questa discussione.
  • Il vincitore del Concorso desktop del mese di aprile è Jerico. L'elenco dei precedenti vincitori è qui.
  • È uscito il numero 17 della Newsletter italiana di Ubuntu. Lo trovate a questo indirizzo.
  • È uscito il numero 59 di Full Circle Magazine in italiano. Lo trovate a questo indirizzo.

[risolto][C - GTK] Stampa testo in finestra Gtk

Linguaggi di programmazione: php, perl, python, C, bash, ecc.

[risolto][C - GTK] Stampa testo in finestra Gtk

Messaggioda frest » lunedì 6 febbraio 2012, 18:37

Salve a tutti! Sto sviluppando un'applicazione in C con un'interfaccia GTK...non conosco bene la libreria, ma solo le funzioni principali per la creazione dei widget più usati....la domanda è questa: ho bisogno di stampare molte variabili ( stringhe e interi ) in una finestra....devo per forza utilizzare le label? c'è un metodo più sbrigativo o un widget fatto apposta? Altrimenti dovrei creare una label per ogni variabile, posizionare nei vari box ecc...tutto questo con una grande quantità di variabili da stampare in una sola finestra potrebbe essere un po' confusionario......
Oppure se devo usare per forza le label, c'è un modo per impostare il testo da stampare con segnaposti e più variabili come in una normale stampa video?
per esempio: printf("Testo: %s, %d\nTesto2: %s, %s", str, c, str2, c2)

Grazie :)
Ultima modifica di frest il martedì 7 febbraio 2012, 20:20, modificato 1 volta in totale.
Avatar utente
frest
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 512
Iscrizione: giugno 2008

Re: [C - GTK] Stampa testo in finestra Gtk

Messaggioda fileo » lunedì 6 febbraio 2012, 20:34

Ciao

La gtk_label ti permette di stampare anche cose più complesse di una sola variabile basta che metti tutto in un'apposita stringa.
Ti permette anche di utilizzare i font tramite la libreria pango.
La cosa che mi viene in mente per farlo con maggiore facilità e quello di scrivere tutto quello che vuoi scrivere su una stringa con sprintf e poi mettere la stringa dentro la label.
Ti posto un piccolo codice da esempio. Ho usato le stringhe della glib che si allungano da sole quando lo spazio è pieno cosi' non mi devo preoccupare di gestire l'allocazione della memoria. Se non le vuoi usare puoi fare tutto quello che ho fatto io anche con le funzioni che trovi in string.h.
Codice: Seleziona tutto
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv){
  int a, b, c;
  GString *string;
  GtkWidget *window, *label;

  gtk_init(&argc, &argv);

  /* inizializzo le le variabili */
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  string = g_string_new(NULL);
  a=1;
  b=1;
  c=a+b;
  /* stampo il contenuto nella stringa si puo' fare anche con sprintf */
  g_string_printf(string, "facciamo le somme\n%d+%d=%d", a, b, c);

  /* setto il contenuto della stringa come testo della label */
  label = gtk_label_new(string->str);
  /* da qui in poi il testo e' nella label quindi libero la stringa */
  g_string_free(string, TRUE);
  gtk_container_add(GTK_CONTAINER(window), label);

  gtk_widget_show_all(window);
  gtk_main();

}



Spero di essere stato chiaro fammi sapere se ci sono problemi.
fileo
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 528
Iscrizione: giugno 2007

Re: [C - GTK] Stampa testo in finestra Gtk

Messaggioda frest » lunedì 6 febbraio 2012, 23:09

Sei stato chiarissimo! Ti ringrazio per la risposta e per il codice di esempio...proverò così e farò sapere in caso di problemi! Grazie ancora
Avatar utente
frest
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 512
Iscrizione: giugno 2008

Re: [C - GTK] Stampa testo in finestra Gtk

Messaggioda fileo » martedì 7 febbraio 2012, 0:10

Quando hai risolto questo problema ricordati di mettere [risolto] nel titolo del primo post.

Alla prossima
fileo
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 528
Iscrizione: giugno 2007

Re: [C - GTK] Stampa testo in finestra Gtk

Messaggioda frest » martedì 7 febbraio 2012, 19:59

Avrei una domanda, per concatenare due stringhe della glib che funzione devo usare? oppure va bene la strcat della string.h ?
Avatar utente
frest
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 512
Iscrizione: giugno 2008

Re: [C - GTK] Stampa testo in finestra Gtk

Messaggioda fileo » martedì 7 febbraio 2012, 20:16

Se usi le GString puoi farlo con la funzione
Codice: Seleziona tutto
GString *           g_string_append                     (GString *string,
                                                         const gchar *val);


qui puoi trovare tutta la documentazione che ti serve.
fileo
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 528
Iscrizione: giugno 2007

Re: [C - GTK] Stampa testo in finestra Gtk

Messaggioda frest » martedì 7 febbraio 2012, 20:20

Ti ringrazio ancora, sono arrivato anche io alla pagina del manuale glib
Avatar utente
frest
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 512
Iscrizione: giugno 2008

Re: [risolto][C - GTK] Stampa testo in finestra Gtk

Messaggioda frest » mercoledì 8 febbraio 2012, 0:50

Scusami, ma visto che mi sembri esperto di gtk ti faccio una domanda :)
avrei bisogno di un array di widget, da dichiarare come campo di una struttura....il problema è che, anche solo facendo la dichiarazione
Codice: Seleziona tutto
GtkWidget* array[dim]
senza fare nessuna operazione/inizializzazione, mi da segmentation fault e non compila....non riesco a capire perchè! Sbaglio qualcosa nella dichiarazione?
Avatar utente
frest
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 512
Iscrizione: giugno 2008

Re: [risolto][C - GTK] Stampa testo in finestra Gtk

Messaggioda fileo » mercoledì 8 febbraio 2012, 2:01

A me una sintassi tipo quella che hai postato funziona.

Ma come fa a darti segmentation fault in compilazione? Quello è un errore che viene fuori a run time.
Potresti spiegare meglio il problema che hai grazie.

P.S.
Esperto di gtk mo mi pare un po' troppo :)
fileo
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 528
Iscrizione: giugno 2007

Re: [risolto][C - GTK] Stampa testo in finestra Gtk

Messaggioda frest » mercoledì 8 febbraio 2012, 13:09

Hai ragione è un errore di run time, ma usando code blocks mi sono abituato a cliccare sempre su build/run e quindi ogni tanto mi confondo :)

allora, il problema che ho riscontrato è questo....ho una struttura dichiarata in un file .h , vorrei che uno dei campi di questa struttura fosse un array di widget....quindi per ora ho provato queste due possibilità:
array statico:
Codice: Seleziona tutto
GtkWidget array[dim]
( senza l'operatore * che invece avevo messo nel post precedente )
array dinamico
Codice: Seleziona tutto
GtkWidget* array
...
mystruct->array = ( GtkWidget* ) malloc ( N * sizeof ( GtkWidget ) );
...
// while
mystruct->array[i] = gtk_label_new ("Testo");
gtk_box_pack_start ( GTK_BOX ( mystruct->hboxs ), mystruct->array[i]  , TRUE, TRUE, 0 );


nel caso dell'array statico mi da segmentation fault
usando l'array dinamico mi da conflitto di tipi nella gtk_box_pack_start .... se non ricordo male tra GtkWidget e GtkWidget*
:-\
è la prima volta che uso le gtk, ci vuole molta pazienza!
Avatar utente
frest
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 512
Iscrizione: giugno 2008

Re: [risolto][C - GTK] Stampa testo in finestra Gtk

Messaggioda frest » mercoledì 8 febbraio 2012, 17:32

Rettifico...risolto! :)
avevo bisogno di un array di puntatori...dunque la dichiarazione doveva essere GtkWidget**
Grazie comunque!
Avatar utente
frest
Scoppiettante Seguace
Scoppiettante Seguace
 
Messaggi: 512
Iscrizione: giugno 2008


Torna a Programmazione

Chi c’è in linea

Visualizzano questa pagina: Eresia, sleax e 4 ospiti