Dans cette partie, nous verrons comment créer une autre fenêtre et la concevoir avec GTK. Nous verrons également quelques fonctionnalités telles que l'ajout de questions et l'utilisation des trois boutons (50%, geler et passer).
ToolBar et ToolButton
Créez une barre d'outils:
En créant un ToolButton, dans ce cas nous mettrons une icône (vous pouvez trouver de nombreuses icônes par défaut ici !) avec «from_stock (Gtk.Stock.IconName):
Nous pouvons voir que dans notre application nous avons une barre avec deux boutons en haut, où nous utiliserons le premier pour créer de nouvelles questions et le second pour importer des questions (via un fichier):
Créer des questions:
Le bouton que nous avons créé précédemment (dans la barre d'outils) lorsque nous cliquons dessus, nous allons ouvrir une nouvelle fenêtre gtk qui nous permettra d'ajouter des questions à notre base de données:
Pour créer une nouvelle fenêtre, nous allons créer une nouvelle classe, que nous appellerons Questions, et comment notre classe App créera une nouvelle fenêtre (this.window = new Gtk.Window ();)
Nous utiliserons quelques composants pour créer l'interface graphique dans l'ordre;
-Étiquette (questions)
- Entrée (où nous écrirons la question)
-Étiquette (réponses)
- 4 cases horizontales qui contiendront une entrée (la réponse) et un interrupteur (pour sélectionner si c'est la bonne)
-Bouton (pour terminer)
On peut voir à quoi ça ressemble:
Pour enregistrer la question nous devrons obtenir le texte des entrées, elles sont obtenues avec get_text () qui renvoie une chaîne.
Pour savoir si si un Switch est actif, nous pouvons utiliser sa méthode soit actif () qui renvoie true s'il est activé et flase s'il est désactivé.
Boutons 50%, Freeze et Pass:
-cinquante% :
Pour 50%, il suffit de regarder quel est le bon bouton et de supprimer 2 qui ne sont pas corrects, dans ce cas nous les annulons avec set_sensitive (false).
Résultat:
-Geler:
Nous remettons la barre à 0.
this.timebar.set_fraction (0);
-Passer:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Partie suivante (4):
Dans le prochain épisode, nous verrons comment améliorer certains aspects de notre application, tels que le fait que les questions n'apparaissent pas toujours à la même position, mettre une icône sur l'application ...
J'adore les réponses ... haha .. Salutations
Très bien ces articles sur vala .. j'espère que les autres .. salutations
J'attends votre entrée sur Vala, j'espère qu'il y a beaucoup de livraisons. À votre santé!
Bel article, merci pour le partage.
Salut,
J'ai suivi vos entrées précédentes pour la création de cette application, le problème vient maintenant que j'essaye d'accéder aux entrées de la nouvelle fenêtre, je le fais de cette façon, dans la méthode saveC de la classe createQuestions (classe qui crée la fenêtre) .
public void saveC () {
string str = questionE.get_text ();
stdout.printf ("Traité% s \ n", str);
}
Mais en sortie, j'obtiens ceci:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: l'assertion `GTK_IS_ENTRY (entrée) 'a échoué
Traité (nul)
J'ai vu quelques exemples et dans la définition des méthodes qui accèdent aux entrées, ils font quelque chose comme ceci:
void on_activate (entrée Gtk.Entry) {
nom = entrée.get_text ();
print ("\ nBonjour" + nom + "! \ n \ n");
}
Mais ils n'ont qu'une seule entrée et dans cet exemple il y en a 5, donc là je suis déjà perdu, vous pourriez mieux me guider.
Eh bien, lorsque vous créez les entrées, vous ne leur donnez pas le même nom, pour obtenir le texte qu'elles ont, vous faites:
r1 = entrée1.get_text ();
r2 = entrée2.get_text ();
r3 = entrée3.get_text ();
r4 = entrée4.get_text ();
Si tu veux, mets un pastebin et je vais le regarder
lolbimbo si en fait je les ai avec des noms différents, mais que je n'en utilise qu'un pour les tests car aucun d'eux ne renvoie le texte que j'ai mis dans l'entrée, cela m'envoie l'erreur mentionnée ci-dessus:
Mais en sortie, j'obtiens ceci:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: l'assertion `GTK_IS_ENTRY (entrée) 'a échoué
Traité (nul)
J'enquête toujours ...
À votre santé.!!
Prêt voici la source, salutations.
http://pastebin.com/pZG8GbrY
Salut Hiram, regardez, je vais vous dire comment vous devez le faire pour le résoudre, la première chose que cela se produit parce que nous créons une nouvelle fenêtre (ce n'est pas la principale), et lors de l'appel de l'entrée, ( désolé pour les mots) Je ne sais pas pourquoi Cette merde ne revient pas comme s'il s'agissait d'une entrée mais d'un widget, mais bon, pour le résoudre, il vous suffit de changer tous les composants statiques que vous avez créés en dynamiques en utilisant var:
var questionE = new Gtk.Entry ();
alors la fonction fonctionnera et vous recevrez le texte à l'intérieur de l'entrée.
save.clicked.connect (() => {
// chaîne str = this.questionE.get_text ();
stdout.printf ("Traité% s \ n", askE.get_text ());
});
Enfin, n'oubliez pas de changer la ligne où vous ajoutez l'entrée pour l'afficher:
askE.show ();
Je vous laisse le code complet avec la modification afin que vous puissiez vérifier que cela fonctionne déjà, c'est-à-dire si vous devez changer tous les éléments (au moins les entrées) pour continuer avec l'application.
http://paste.desdelinux.net/5048
salutations
Chale, ici encore dérangé, je continue d'avoir des problèmes, le code que vous me montrez va bien, il se passe seulement quelque chose dans l'événement:
save.clicked.connect (() => {
// chaîne str = this.questionE.get_text ();
stdout.printf ("Traité% s \ n", askE.get_text ());
});
C'est à l'intérieur de la classe Questions et ça marche bien mais quand on veut entrer depuis saveC, ça ne compile pas, ça me lance cette erreur:
bu01.vala: 50.38-50.50: erreur: Argument 1: Impossible de convertir de `Questions.saveC 'en` Gtk.Button.clicked'
this.guardar.clicked.connect (this.guardarC);
^^^^^^^^^^^^^
bu01.vala: 251.58-251.66: avertissement: Gtk.Stock est obsolète depuis la 3.10
bu01.vala: 260.59-260.67: avertissement: Gtk.Stock est obsolète depuis la 3.10
Échec de la compilation: 1 erreur (s), 2 avertissement (s)
Je veux penser que c'est à cause de la façon dont je passe le paramètre lorsque l'événement de clic se produit:
this.guardar.clicked.connect (this.guardarC);
Merci d'avance pour les commentaires; ici je laisse le code qui jette l'erreur: http://pastebin.com/pLzExhrb
Je ne l'ai pas essayé mais je pense que supprimer l'argument de la fonction le rejettera.
public void saveC (Gtk.Entry demandeE) {
string str = questionE.get_text ();
stdout.printf ("Traité% s \ n", str);
}
a:
public void saveC () {
string str = questionE.get_text ();
stdout.printf ("Traité% s \ n", str);
}
lolbimbo, j'ai essayé de supprimer l'argument et cela ne fonctionne toujours pas,
J'essaie toujours de comprendre le problème, je suis nouveau sur Vala et je ne trouve pas beaucoup de documentation, j'espère trouver la solution bientôt ou attendre que vous publiiez la quatrième partie xD.
Je continue d'essayer ...
Salutations.