Δημιουργία εφαρμογής (Vala + GTK 3) [3ο μέρος]

Σε αυτό το μέρος θα δούμε πώς να δημιουργήσουμε ένα άλλο παράθυρο και να το σχεδιάσουμε με GTK. Θα δούμε επίσης ορισμένες λειτουργίες όπως η προσθήκη ερωτήσεων και η χρήση των τριών κουμπιών (50%, πάγωμα και περάστε).

ToolBar και ToolButton

Δημιουργία γραμμής εργαλείων:

app2

Δημιουργώντας ένα κουμπί εργαλείου, σε αυτήν την περίπτωση θα βάλουμε ένα εικονίδιο (μπορείτε να βρείτε πολλά εικονίδια από προεπιλογή Aquí) με «from_stock (Gtk.Stock.IconName):

Λήψη από 2013-12-07 23:26:52

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

Λήψη από 2013-11-08 00:30:32

Δημιουργία ερωτήσεων:
Το κουμπί που δημιουργήσαμε προηγουμένως (στη γραμμή εργαλείων) όταν το κάνουμε κλικ, θα ανοίξουμε ένα νέο παράθυρο gtk που θα μας επιτρέψει να προσθέσουμε ερωτήσεις στη βάση δεδομένων μας:

app1

Για να δημιουργήσουμε ένα νέο παράθυρο θα δημιουργήσουμε μια νέα τάξη, την οποία θα ονομάσουμε Ερωτήσεις και πώς θα δημιουργήσει ένα νέο παράθυρο η κλάση εφαρμογών (this.window = new Gtk.Window ();)

Θα χρησιμοποιήσουμε μερικά στοιχεία για να δημιουργήσουμε τη γραφική διεπαφή με τη σειρά.

-Ετικέτα (Ερωτήσεις)

- Είσοδος (όπου θα γράψουμε την ερώτηση)

-Ετικέτα (απαντήσεις)

- 4 οριζόντια κουτιά που θα περιέχουν μια καταχώριση (την απάντηση) και έναν διακόπτη (για να επιλέξετε εάν είναι η σωστή)

- Κουμπί (για ολοκλήρωση)

Μπορούμε να δούμε πώς φαίνεται:

Λήψη από 2013-12-08 01:07:08

Για να αποθηκεύσετε την ερώτηση θα πρέπει να λάβουμε το κείμενο των καταχωρήσεων, λαμβάνονται με get_text () που επιστρέφει μια συμβολοσειρά.

app5

Για να μάθουμε αν ένας διακόπτης είναι ενεργός μπορούμε να χρησιμοποιήσουμε τη μέθοδο του Γίνε δραστήριος () που επιστρέφει true αν είναι ενεργοποιημένο και flase εάν είναι απενεργοποιημένο.

 50%, κουμπιά Freeze και Pass:

 -πενήντα%:

Για 50% πρέπει να δούμε μόνο ποιο είναι το σωστό κουμπί και να αφαιρέσουμε 2 που δεν είναι σωστά, σε αυτήν την περίπτωση τα ακυρώνουμε με το set_sensitive (false).

app4

αποτέλεσμα:

app6

-Πάγωμα:

Ορίσαμε ξανά τη γραμμή στο 0.

this.timebar.set_fraction (0);

-Πέρασμα:

button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});

 Επόμενο μέρος (4):

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


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

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

*

*

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

  1.   f3niX dijo

    Λατρεύω τις απαντήσεις ... χαχα .. Χαιρετισμούς

  2.   πανοχώρα dijo

    Αυτά τα άρθρα για τη Vala είναι πολύ καλά, περιμένω και τα άλλα, με εκτίμηση

  3.   cr0t0 dijo

    Έχω σε εκκρεμότητα την είσοδό σας στο Vala, ελπίζω να υπάρχουν πολλές παραδόσεις. Χαιρετίσματα!

  4.   pptru dijo

    Ωραίο άρθρο, ευχαριστώ για την κοινή χρήση.

  5.   Hiram dijo

    Γεια σας,

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

    δημόσιο άκυρο saveC () {
    string str = questionE.get_text ();
    stdout.printf ("Συνθήκη% s \ n", str);
    }

    Αλλά στην έξοδο το παίρνω αυτό:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: assertion "GTK_IS_ENTRY (είσοδος)" απέτυχε

    Συνθήκη (μηδέν)

    Έχω δει μερικά παραδείγματα και στον ορισμό των μεθόδων που έχουν πρόσβαση στις εγγραφές κάνουν κάτι σαν αυτό:

    void on_activate (Καταχώριση Gtk.Entry) {
    όνομα = entry.get_text ();
    εκτύπωση ("\ nΓεια" + όνομα + "! \ n \ n");
    }

    Αλλά έχουν μόνο μία καταχώρηση και σε αυτό το παράδειγμα υπάρχουν 5, οπότε εδώ χάθηκα ήδη, θα μπορούσατε να με καθοδηγήσετε καλύτερα.

    1.    lolbimbo dijo

      Λοιπόν, όταν δημιουργείτε τις καταχωρήσεις δεν τους δίνετε το ίδιο όνομα, για να λάβετε το κείμενο που έχουν κάνετε:

      r1 = είσοδος1.get_text ();
      r2 = είσοδος2.get_text ();
      r3 = είσοδος3.get_text ();
      r4 = είσοδος4.get_text ();

      Αν θέλετε, βάλτε ένα pastebin και θα το κοιτάξω

      1.    Hiram dijo

        lolbimbo Ναι, στην πραγματικότητα τα έχω με διαφορετικά ονόματα, αλλά χρησιμοποιώ μόνο ένα για δοκιμή αφού κανένα από αυτά δεν επιστρέφει το κείμενο που έβαλα στην καταχώρηση, μου στέλνει το προαναφερθέν σφάλμα:

        Αλλά στην έξοδο το παίρνω αυτό:
        (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: assertion "GTK_IS_ENTRY (είσοδος)" απέτυχε

        Συνθήκη (μηδέν)

        Εξακολουθώ να ερευνώ ...

        Στην υγειά σας.!!

      2.    Hiram dijo

        Έτοιμοι εδώ είναι η πηγή, χαιρετισμοί.
        http://pastebin.com/pZG8GbrY

    2.    lolbimbo dijo

      Γεια σας Χιράμ, κοίτα, θα σας πω πώς πρέπει να το κάνετε για να το λύσετε, το πρώτο πράγμα συμβαίνει επειδή δημιουργούμε ένα νέο παράθυρο (δεν είναι το κύριο) και όταν καλούμε την καταχώριση, (συγγνώμη για τις λέξεις) Δεν ξέρω γιατί Αυτό το σκατά δεν επιστρέφει σαν να ήταν μια καταχώριση αλλά ένα Widget, αλλά hey, για να το λύσετε, πρέπει απλώς να αλλάξετε όλα τα στατικά στοιχεία που δημιουργήσατε σε δυναμική χρησιμοποιώντας var:

      var questionE = νέο Gtk.Entry ();

      τότε η συνάρτηση θα λειτουργήσει και θα λάβετε το κείμενο μέσα στην καταχώρηση.

      save.clicked.connect (() => {
      // string str = this.questionE.get_text ();
      stdout.printf ("Συνθήκη% s \ n", askE.get_text ());
      })?

      Τέλος, μην ξεχάσετε να αλλάξετε τη γραμμή όπου προσθέτετε την καταχώρηση για να την εμφανίσετε:

      askE.show ();

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

      http://paste.desdelinux.net/5048

      αφορά

      1.    Hiram dijo

        Chale, εδώ γύρω με ενοχλεί ξανά, συνεχίζω να έχω προβλήματα, ο κωδικός που μου δείχνεις λειτουργεί καλά, μόνο κάτι συμβαίνει στην περίπτωση:

        save.clicked.connect (() => {
        // string str = this.questionE.get_text ();
        stdout.printf ("Συνθήκη% s \ n", askE.get_text ());
        })?

        Είναι μέσα στην κλάση Questions και λειτουργεί καλά, αλλά όταν θέλω να το εισάγω από το saveC, δεν μεταγλωττίζεται, μου βγάζει αυτό το σφάλμα:

        bu01.vala:50.38-50.50: σφάλμα: Επιχείρημα 1: Δεν είναι δυνατή η μετατροπή από "Questions.saveC" σε "Gtk.Button.clicked"
        this.guardar.clicked.connect (this.guardarC);
        ^^^^^^^^^^^^
        bu01.vala: 251.58-251.66: προειδοποίηση: Gtk.Stock έχει καταργηθεί από τις 3.10
        bu01.vala: 260.59-260.67: προειδοποίηση: Gtk.Stock έχει καταργηθεί από τις 3.10
        Η συλλογή απέτυχε: 1 σφάλμα, 2 προειδοποιήσεις

        Θα ήθελα να πιστεύω ότι οφείλεται στον τρόπο με τον οποίο μεταβιβάζω την παράμετρο όταν συμβαίνει το συμβάν κλικ:
        this.guardar.clicked.connect (this.guardarC);

        Σας ευχαριστώ πολύ εκ των προτέρων για τα σχόλια. Εδώ είναι ο κώδικας που πετάει το σφάλμα: http://pastebin.com/pLzExhrb

      2.    lolbimbo dijo

        Δεν το έχω δοκιμάσει αλλά πιστεύω ότι η αφαίρεση του ορίσματος από τη συνάρτηση θα το πετάξει.

        δημόσιο άκυρο saveC (Gtk.Entry askE) {
        string str = questionE.get_text ();
        stdout.printf ("Συνθήκη% s \ n", str);
        }

        a:
        δημόσιο άκυρο saveC () {
        string str = questionE.get_text ();
        stdout.printf ("Συνθήκη% s \ n", str);
        }

      3.    Hiram dijo

        lolbimbo, προσπάθησα να αφαιρέσω το επιχείρημα και ακόμα δεν λειτουργεί,

        Εξακολουθώ να προσπαθώ να καταλάβω το πρόβλημα, είμαι νέος στο Vala και δεν μπορώ να βρω πολλή τεκμηρίωση, ελπίζω να βρω τη λύση σύντομα ή να περιμένω μέχρι να κυκλοφορήσετε το τέταρτο μέρος xD.

        Συνεχίζω να προσπαθώ ...

        Χαιρετισμούς.