Δημιουργία εφαρμογής Vala + Gtk3. [1ο μέρος]

μετά την πρώτη θέση Διάβασα ένα σχόλιο ότι θα ήταν καλύτερο να ξεκινήσετε με κάτι πιο περίπλοκο από ένα "γεια σας κόσμο", τότε θα κάνω μια ακολουθία (3 o 4) δημοσίευση δημιουργίας μιας απλής εφαρμογής (με vala + gtk 3).

Η εφαρμογή θα αποτελείται από ένα απλό παιχνίδι ερωτήσεων και απαντήσεων πολλαπλής επιλογής (τύπος Trivia), στο οποίο η απάντηση σε 3 ερωτήσεις λάθος τελειώνει (παιχνίδι τελείωσε) και ο στόχος είναι να απαντήσετε σε όσο το δυνατόν περισσότερες ερωτήσεις, για κάθε ερώτηση που έχετε περιορισμένο χρόνο απάντηση.

Σχέδιο

Ο κύριος σχεδιασμός της εφαρμογής μας θα είναι:

app

Αργότερα θα βάλουμε μερικά κουμπιά που θα μας δώσουν την επιλογή 50% (εξαλείφοντας δύο λανθασμένες απαντήσεις), παγώστε το χρόνο, περάστε μια ερώτηση. Όλα αυτά μπορούν να χρησιμοποιηθούν μόνο μία φορά, απενεργοποιημένα μόλις χρησιμοποιηθούν.

Σχεδιασμός α Κώδικας
Όπως μπορούμε να δούμε στο σχεδιασμό μπορούμε να δούμε τα στοιχεία gtk που θα χρησιμοποιήσουμε:

Απαντήσεις -> Κουμπί.

Ερώτηση -> Ετικέτα.

Ώρα -> ProgressBar.

Λάθος / σωστά σημεία και ερωτήσεις -> Ετικέτα.

Μπορούμε να δούμε ότι έχουμε μια κάθετη δομή, επομένως μπορούμε να χρησιμοποιήσουμε το GBox κάθετα.

Κώδικας

int main (string [] args) {Gtk.init (ref args); var window = νέο Gtk.Window (); window.title = "εφαρμογή"; window.window_position = Gtk.WindowPosition.CENTER; window.set_default_size (300, 340); window.destroy.connect (Gtk.main_quit); window.set_border_width (10); // κάθετο πλαίσιο var box = νέο Gtk.Box (Gtk.Orientation.VERTICAL, 0); box.set_spacing (10); // Ετικέτα για την ερώτηση var question = new Gtk.Label ("Question?"); // time bar bar var time_bar = νέο Gtk.ProgressBar (); timebar.set_text ("Ώρα"); time_bar.set_show_text (αληθινό); // Κουμπιά απόκρισης var response1 = νέο Gtk.Button.with_label ("Response 1"); var resposta2 = νέο Gtk.Button.with_label ("Απάντηση 2"); var resposta3 = νέο Gtk.Button.with_label ("Απάντηση 3"); var resposta4 = νέο Gtk.Button.with_label ("Απάντηση 4"); // ετικέτες info var points = new Gtk.Label ("Points: 0"); box.pack_start (ερώτηση); box.pack_start (time_bar); box.pack_start (απάντηση1); box.pack_start (resposta2); box.pack_start (resposta3); box.pack_start (resposta4); box.pack_start (βαθμοί); window.add (πλαίσιο); window.show_all (); Gtk.main (); επιστροφή 0;}

Λήψη από 2013-11-02 21:44:14

Για να μετακινήσουμε το "time" χρησιμοποιούμε το GLib. Timeout όπου κάθε 500 χιλιοστά του δευτερολέπτου θα ενεργοποιείται (είναι ένας βρόχος όπου θα αυξάνεται η μεταβλητή που περιέχει την τιμή της γραμμής μας)

GLib.Timeout.add (500, () => {// Λήψη της τρέχουσας προόδου: // (0.0 -> 0%; 1.0 -> 100%) διπλή πρόοδος = time_bar.get_fraction (); // Ενημέρωση της γραμμής: πρόοδος = πρόοδος + 0.01; time_bar.set_fraction (πρόοδος); // Επανάληψη έως 100% πρόοδος επιστροφής <1.0;});

Σύνδεσμοι ενδιαφέροντος 
http://www.valadoc.org/#!wiki=index (μπορείτε να βρείτε όλα τα στοιχεία gtk με τις μεθόδους τους ...)


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   Λοζανότοξ dijo

    Πολύ καλό, θα σας ρωτήσω πώς μπορώ να φτιάξω ένα είδος TABS αλλά κάθετα, αν και δεν πρέπει απαραίτητα να είναι καρτέλες, μπορεί να είναι κουμπιά ή ToggleButtons, αλλά χρειάζομαι τη συμπεριφορά μιας καρτέλας, που όταν αγγίζω 1 το περιεχόμενό της εμφανίζεται και η άλλη καρτέλα είναι απενεργοποιημένη, δεν ξέρω αν εξηγώ τον εαυτό μου, αφήνω μια εικόνα για να δω αν μπορείτε να μου δώσετε κάποιες πληροφορίες για διερεύνηση. Σας ευχαριστώ!

    ΕΙΚΟΝΑ: http://i.imm.io/1jURw.png

    1.    lolbimbo dijo

      Η "διάταξη" ή η αλλαγή κειμένου (για παράδειγμα);

  2.   pandev92 dijo

    Καταλανικά parla

  3.   εμβρόντητος dijo

    Αυτό είναι πολύ καλό στην πραγματικότητα είναι κάτι παρόμοιο με αυτό που έψαχνα, μια ερώτηση, θα μπορούσε αυτή η ερώτηση να συνδεθεί με το τερματικό με οποιονδήποτε τρόπο;
    Για παράδειγμα: Για να ξεκινήσω, αφιερώνω χρόνο για να απαντήσω, το αφήνω σε απεριόριστο και αυτό θα ήθελα να κάνω.

    Τι περιβάλλον επιφάνειας εργασίας θέλετε να εγκαταστήσετε;
    KDE
    Gnome 3
    Κανέλα
    ενότητα

    Και καθένα από αυτά που συνδέθηκε με την αντίστοιχη εντολή εγκατάστασης στο τερματικό, sudo apt-get install ubuntu-desktop

    1.    lolbimbo dijo

      Ναι, θα πρέπει απλώς να γράψετε Process.spawn_command_line_async ("apt-get install ubuntu-desktop");

      http://valadoc.org/#!api=glib-2.0/GLib.Process.spawn_command_line_sync

  4.   Σαούλ Ουρίμπε dijo

    Εξαιρετικά, μου αρέσει η ανάρτηση, θα εξασκηθώ (και βλέπω να προχωρά), χαιρετισμούς