In dit deel zullen we zien hoe we een ander venster kunnen maken en dit met GTK kunnen ontwerpen. We zullen ook enkele functionaliteiten zien zoals het toevoegen van vragen en het gebruik van de drie knoppen (50%, stilzetten en passeren).
ToolBar en ToolButton
Maak een werkbalk:
Een ToolButton maken, in dit geval zullen we een pictogram plaatsen (u kunt standaard veel pictogrammen vinden hier) met «from_stock (Gtk.Stock.IconName):
We kunnen zien dat we in onze applicatie een balk hebben met twee knoppen bovenaan, waar we de eerste zullen gebruiken om nieuwe vragen te maken en de tweede om vragen te importeren (via een bestand):
Vragen aanmaken:
Met de knop die we eerder hebben gemaakt (in de werkbalk) als we erop klikken, openen we een nieuw gtk-venster waarmee we vragen aan onze database kunnen toevoegen:
Om een nieuw venster te maken, zullen we een nieuwe klasse aanmaken, die we Vragen zullen noemen, en hoe onze App-klasse een nieuw venster zal aanmaken (this.window = new Gtk.Window ();)
We zullen een paar componenten gebruiken om de grafische interface op volgorde te maken;
-Label (vragen)
- Invoer (waar we de vraag zullen schrijven)
-Label (reacties)
- 4 horizontale vakken die een invoer (het antwoord) en een schakelaar bevatten (om te selecteren of dit de juiste is)
-Button (om te voltooien)
We kunnen zien hoe het eruit ziet:
Om de vraag op te slaan, moeten we de tekst van de items ophalen, ze worden verkregen met get_text () die een string retourneert.
Om te weten of een switch actief is, kunnen we de bijbehorende methode gebruiken word actief () die true retourneert als het is ingeschakeld en flase als het is uitgeschakeld.
50%, Freeze en Pass-knoppen:
-vijftig%:
Voor 50% hoeven we alleen maar te kijken welke de juiste knop is en 2 die niet juist zijn te verwijderen, in dit geval annuleren we ze met set_sensitive (false).
resultaat:
-Bevriezen:
We zetten de lat weer op 0.
this.timebar.set_fraction (0);
-Voorbij gaan aan:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
Volgend deel (4):
In de volgende aflevering zullen we zien hoe we aspecten van onze applicatie kunnen verbeteren, zoals dat de vragen niet altijd op dezelfde positie verschijnen, een pictogram op de app plaatsen ...
Ik hou van de antwoorden ... haha .. Groeten
Heel goed deze artikelen over vala .. ik hoop de anderen .. groeten
Ik wacht op uw bericht over Vala, ik hoop dat er veel leveringen zijn Proost!
Leuk artikel, bedankt voor het delen.
Hallo,
Ik heb je eerdere vermeldingen gevolgd voor het maken van deze app, het probleem komt nu dat ik probeer toegang te krijgen tot de vermeldingen van het nieuwe venster, ik doe het op deze manier, in de saveC-methode van de createQuestions-klasse (klasse die het venster maakt).
openbare ongeldige saveC () {
string str = vraagE.get_text ();
stdout.printf ("Verdrag% s \ n", str);
}
Maar bij uitvoer krijg ik dit:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: assertion `GTK_IS_ENTRY (entry) 'mislukt
Verdrag (null)
Ik heb enkele voorbeelden gezien en in de definitie van de methoden die toegang krijgen tot de items, doen ze zoiets als dit:
ongeldig on_activate (Gtk.Entry invoer) {
naam = entry.get_text ();
print ("\ nHallo" + naam + "! \ n \ n");
}
Maar ze hebben maar één vermelding en in dit voorbeeld zijn er 5, dus hier ben ik al verdwaald, je zou me beter kunnen begeleiden.
Welnu, wanneer u de vermeldingen maakt, geeft u ze niet dezelfde naam, om de tekst te krijgen die ze hebben, doet u:
r1 = entry1.get_text();
r2 = entry2.get_text();
r3 = entry3.get_text();
r4 = entry4.get_text();
Als je wilt, leg dan een pastabin en ik zal ernaar kijken
lolbimbo als ik ze in feite met verschillende namen heb, maar ik gebruik er alleen een voor tests, omdat geen van hen de tekst retourneert die ik in het item heb ingevoerd, het stuurt me de bovenstaande foutmelding:
Maar bij uitvoer krijg ik dit:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: assertion `GTK_IS_ENTRY (entry) 'mislukt
Verdrag (null)
Ik ben nog aan het onderzoeken ...
Proost. !!
Hier klaar is de bron, groeten.
http://pastebin.com/pZG8GbrY
Hallo Hiram, kijk, ik zal je vertellen hoe je het moet doen om het op te lossen, het eerste is dat we een nieuw venster aan het maken zijn (het is niet het hoofdvenster), en bij het aanroepen van het item (sorry voor de woorden) Ik weet niet waarom Die shit keert niet terug alsof het een item is, maar een Widget, maar ach, om het op te lossen hoef je alleen maar alle statische componenten die je hebt gemaakt in dynamisch te veranderen met var:
var questionE = nieuwe Gtk.Entry ();
dan werkt de functie en ontvang je de tekst in het item.
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Verdrag% s \ n", askE.get_text ());
});
Vergeet ten slotte niet om de regel waar u het item toevoegt te wijzigen om het weer te geven:
askE.show ();
Ik laat u de volledige code met de wijziging achter, zodat u kunt controleren of deze al werkt, dat wil zeggen als u alle elementen (in ieder geval de invoer) moet wijzigen om door te gaan met de toepassing.
http://paste.desdelinux.net/5048
groeten
Chale, hier weer last van, ik heb nog steeds problemen, de code die je me laat zien is prima, alleen gebeurt er iets in het geval:
save.clicked.connect (() => {
// string str = this.questionE.get_text ();
stdout.printf ("Verdrag% s \ n", askE.get_text ());
});
Het bevindt zich in de klasse Vragen en het werkt prima, maar als ik vanuit saveC naar binnen wil, compileert het niet, maar krijg ik de volgende foutmelding:
bu01.vala: 50.38-50.50: error: Argument 1: kan niet converteren van `Questions.saveC 'naar` Gtk.Button.clicked'
this.guardar.clicked.connect (this.guardarC);
bu01.vala: 251.58-251.66: waarschuwing: Gtk.Stock is verouderd sinds 3.10
bu01.vala: 260.59-260.67: waarschuwing: Gtk.Stock is verouderd sinds 3.10
Compilatie mislukt: 1 fout (en), 2 waarschuwing (en)
Ik wil denken dat het komt door de manier waarop ik de parameter passeer wanneer de klikgebeurtenis plaatsvindt:
this.guardar.clicked.connect (this.guardarC);
Bij voorbaat dank voor de feedback; hier laat ik de code achter die de fout veroorzaakt: http://pastebin.com/pLzExhrb
Ik heb het niet geprobeerd, maar ik denk dat het verwijderen van het argument uit de functie het zal weggooien.
public void saveC (Gtk.Entry vraagtE) {
string str = vraagE.get_text ();
stdout.printf ("Verdrag% s \ n", str);
}
a:
openbare ongeldige saveC () {
string str = vraagE.get_text ();
stdout.printf ("Verdrag% s \ n", str);
}
lolbimbo, ik heb geprobeerd het argument te verwijderen en het werkt nog steeds niet,
Ik probeer het probleem nog steeds te begrijpen, ik ben nieuw bij Vala en ik kan niet veel documentatie vinden, ik hoop de oplossing snel te vinden of wacht tot je het vierde deel xD vrijgeeft.
Ik blijf proberen ...
Groeten.