In questa parte vedremo come creare un'altra finestra e disegnarla con GTK. Vedremo anche alcune funzionalità come l'aggiunta di domande e l'utilizzo dei tre pulsanti (50%, blocca e passa).
ToolBar e ToolButton
Crea una barra degli strumenti:
Creando un ToolButton, in questo caso metteremo un'icona (puoi trovare molte icone di default qui) con «from_stock (Gtk.Stock.IconName):
Possiamo vedere che nella nostra applicazione abbiamo una barra con due pulsanti in alto, dove useremo il primo per creare nuove domande e il secondo per importare domande (tramite un file):
Creazione di domande:
Il pulsante che abbiamo creato in precedenza (nella barra degli strumenti) quando ci clicchiamo sopra, apriremo una nuova finestra gtk che ci permetterà di aggiungere domande al nostro database:
Per creare una nuova finestra creeremo una nuova classe, che chiameremo Domande, e come la nostra classe App creerà una nuova finestra (this.window = new Gtk.Window ();)
Useremo alcuni componenti per creare l'interfaccia grafica in ordine;
-Etichetta (Domande)
- Ingresso (dove scriveremo la domanda)
-Etichetta (risposte)
- 4 caselle orizzontali che conterranno una Entry (la risposta) e un Switch (da selezionare se è quella corretta)
-Pulsante (per completare)
Possiamo vedere come appare:
Per salvare la domanda dovremo ottenere il testo delle entrate, si ottengono con get_text () che restituisce una stringa.
Per sapere se è attivo uno Switch possiamo usare il suo metodo get_active () che restituisce true se è acceso e flase se è spento.
Pulsanti 50%, Blocca e Passa:
-fifty%:
Per il 50% dobbiamo solo guardare quale è il pulsante corretto e rimuovere 2 che non sono quello corretto, in questo caso li cancelliamo con set_sensitive (false).
risultato:
-Congelare:
Impostiamo nuovamente la barra su 0.
this.timebar.set_fraction (0);
-Passaggio:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Parte successiva (4):
Nella prossima puntata vedremo come migliorare gli aspetti della nostra applicazione, come ad esempio che le domande non appaiono sempre nella stessa posizione, metti un'icona sull'app ...
Adoro le risposte ... haha .. Saluti
Molto buoni questi articoli sulla vala .. spero anche gli altri .. saluti
Ho in attesa del tuo ingresso su Vala, spero che ci saranno molte consegne. Saluti!
Bell'articolo, grazie per la condivisione.
Ciao,
Ho seguito le tue precedenti voci per la creazione di questa app, il problema viene ora che provo ad accedere agli ingressi della nuova finestra, lo faccio in questo modo, nel metodo saveC della classe createQuestions (classe che crea la finestra) .
public void saveC () {
stringa str = questionE.get_text ();
stdout.printf ("Trattato% s \ n", str);
}
Ma in uscita ottengo questo:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: asserzione `GTK_IS_ENTRY (entry) 'non riuscita
Trattato (null)
Ho visto alcuni esempi e nella definizione dei metodi che accedono agli ingressi fanno qualcosa del genere:
void on_activate (voce Gtk.Entry) {
nome = entry.get_text ();
print ("\ nCiao" + nome + "! \ n \ n");
}
Ma hanno solo una voce e in questo esempio ce ne sono 5, quindi qui mi sono già perso, potresti guidarmi meglio.
Ebbene, quando crei le voci non dai loro lo stesso nome, per ottenere il testo che hanno:
r1 = entry1.get_text();
r2 = entry2.get_text();
r3 = entry3.get_text();
r4 = entry4.get_text();
Se vuoi, metti un pasticcino e io lo guarderò
lolbimbo se in effetti li ho con nomi diversi, ma ne sto usando uno solo per i test poiché nessuno di loro restituisce il testo che ho inserito nella voce, mi invia l'errore sopra menzionato:
Ma in uscita ottengo questo:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: asserzione `GTK_IS_ENTRY (entry) 'non riuscita
Trattato (null)
Sto ancora indagando ...
Saluti.!!
Pronta ecco la fonte, saluti.
http://pastebin.com/pZG8GbrY
Ciao Hiram, guarda, ti dirò come devi farlo per risolverlo, la prima cosa succede perché stiamo creando una nuova finestra (non è quella principale), e quando chiami la voce, (scusa per le parole) Non so perché Quella merda non ritorna come se fosse una voce ma un Widget, ma ehi, per risolverlo devi solo cambiare tutti i componenti statici che hai creato in dinamici usando var:
var questionE = new Gtk.Entry ();
quindi la funzione funzionerà e riceverai il testo all'interno della voce.
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Trattato% s \ n", askE.get_text ());
});
Infine, non dimenticare di cambiare la riga in cui aggiungi la voce per mostrarla:
askE.show ();
Vi lascio il codice completo con la modifica in modo che possiate controllare che già funzioni, cioè se dovete cambiare tutti gli elementi (almeno le voci) per proseguire con l'applicazione.
http://paste.desdelinux.net/5048
saluti
Chale, qui di nuovo da fastidio, continuo ad avere problemi, il codice che mi mostri va bene, succede solo qualcosa:
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Trattato% s \ n", askE.get_text ());
});
È all'interno della classe Questions e funziona bene ma quando si desidera accedere da saveC, non si compila, mi genera questo errore:
bu01.vala: 50.38-50.50: errore: argomento 1: impossibile convertire da `Questions.saveC 'a` Gtk.Button.clicked'
this.guardar.clicked.connect (this.guardarC);
^^^^^^^^^^^^^
bu01.vala: 251.58-251.66: avviso: Gtk.Stock è stato deprecato dalla 3.10
bu01.vala: 260.59-260.67: avviso: Gtk.Stock è stato deprecato dalla 3.10
Compilazione non riuscita: 1 errore / i, 2 avvertenze
Voglio pensare che sia a causa del modo in cui passo il parametro quando si verifica l'evento clic:
this.guardar.clicked.connect (this.guardarC);
Grazie in anticipo per il feedback; qui lascio il codice che genera l'errore: http://pastebin.com/pLzExhrb
Non l'ho testato ma penso che rimuovere l'argomento dalla funzione lo getterà via.
public void saveC (Gtk.Entry askE) {
stringa str = questionE.get_text ();
stdout.printf ("Trattato% s \ n", str);
}
a:
public void saveC () {
stringa str = questionE.get_text ();
stdout.printf ("Trattato% s \ n", str);
}
lolbimbo, ho provato a rimuovere l'argomento e ancora non funziona,
Sto ancora cercando di capire il problema, sono nuovo di Vala e non riesco a trovare molta documentazione, spero di trovare presto la soluzione o aspetto che tu rilasci la quarta parte xD.
Continuo a provare ...
Saluti.