יצירת אפליקציה (Vala + GTK 3) [חלק שלישי]

בחלק זה נראה כיצד ליצור חלון נוסף ולעצב אותו בעזרת GTK. נראה גם כמה פונקציות כגון הוספת שאלות ושימוש בשלושת הכפתורים (50%, הקפאה והעברה).

סרגל הכלים וכפתור הכלים

צור סרגל כלים:

אפליקציה2

יצירת כפתור כלים, במקרה זה אנו שמים סמל (ניתן למצוא סמלים רבים כברירת מחדל כאן) עם «from_stock (Gtk.Stock.IconName):

לכידה מ 2013-12-07 23:26:52

אנו יכולים לראות שבאפליקציה שלנו יש סרגל עם שני כפתורים בחלקו העליון, שם נשתמש בראשון ליצירת שאלות חדשות ובשני לייבוא ​​שאלות (באמצעות קובץ):

לכידה מ 2013-11-08 00:30:32

יצירת שאלות:
הכפתור שיצרנו בעבר (בסרגל הכלים) כאשר אנו לוחצים עליו נפתח חלון gtk חדש שיאפשר לנו להוסיף שאלות למסד הנתונים שלנו:

אפליקציה1

כדי ליצור חלון חדש ניצור מחלקה חדשה, אותה נקרא שאלות וכיצד מחלקת האפליקציות שלנו תיצור חלון חדש (this.window = Gtk.Window חדש ();)

נשתמש בכמה רכיבים כדי ליצור את הממשק הגרפי לפי הסדר;

-תווית (שאלות)

- כניסה (שם נכתוב את השאלה)

-תווית (תגובות)

- 4 תיבות אופקיות שיכילו ערך (התשובה) ומתג (כדי לבחור אם זה נכון)

כפתור (להשלמה)

אנחנו יכולים לראות איך זה נראה:

לכידה מ 2013-12-08 01:07:08

כדי לשמור את השאלה נצטרך להשיג את טקסט הערכים, הם מתקבלים באמצעות get_text () המחזירה מחרוזת.

אפליקציה5

כדי לדעת אם מתג פעיל אנו יכולים להשתמש בשיטה שלו להיות פעיל () אשר מחזיר אמת אם הוא פועל ומתפנה אם הוא כבוי.

 50%, כפתורי הקפאה ומעבר:

 -חמישים% :

עבור 50% עלינו רק לבדוק מהו הכפתור הנכון ולהסיר 2 שאינם נכונים, במקרה זה אנו מבטלים אותם עם set_sensitive (false).

אפליקציה4

תוצאה:

אפליקציה6

-הַקפָּאָה:

הגדרנו את הרף שוב ל -0.

this.timebar.set_fraction (0);

-לַעֲבוֹר:

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

 החלק הבא (4):

בפרק הבא נראה כיצד לשפר היבטים של היישום שלנו, כמו למשל שהשאלות לא תמיד מופיעות באותו מיקום, שמים אייקון לאפליקציה ...


השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   f3niX דיג'ו

    אני אוהב את התשובות ... חח .. ברכות

  2.   פנצ'ומורה דיג'ו

    טוב מאוד המאמרים האלה על ואלה .. אני מקווה שהאחרים .. ברכות

  3.   cr0t0 דיג'ו

    אני ממתין לכניסה שלך לוואלה, אני מקווה שיש הרבה משלוחים. לחיים!

  4.   pptru דיג'ו

    כתבה נחמדה, תודה על השיתוף.

  5.   חירם דיג'ו

    שלום,

    עקבתי אחר הערכים הקודמים שלך ליצירת אפליקציה זו, הבעיה מגיעה כעת כשאני מנסה לגשת לערכי החלון החדש, אני עושה זאת בדרך זו, בשיטת saveC של מחלקת createQuestions (מחלקה שיוצרת את החלון) .

    בטל ציבורי saveC () {
    מחרוזת str = questionE.get_text ();
    stdout.printf ("הסכם% s \ n", str);
    }

    אבל בתפוקה אני מקבל את זה:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: הקביעה 'GTK_IS_ENTRY (ערך)' נכשלה

    חוזה (null)

    ראיתי כמה דוגמאות ובהגדרת השיטות שניגשות לערכים הם עושים משהו כזה:

    בטל on_activate (ערך Gtk.Entry) {
    שם = entry.get_text ();
    הדפס ("\ n שלום" + שם + "! \ n \ n");
    }

    אבל יש להם רק ערך אחד ובדוגמה זו יש 5, אז הנה אני כבר אבוד, אתה יכול להנחות אותי טוב יותר.

    1.    לולבימבו דיג'ו

      ובכן, כשאתה יוצר את הערכים אתה לא נותן להם את אותו השם, כדי לקבל את הטקסט שיש לך:

      r1 = entry1.get_text();
      r2 = entry2.get_text();
      r3 = entry3.get_text();
      r4 = entry4.get_text();

      אם תרצה, שים פח אגן ואני אסתכל עליו

      1.    חירם דיג'ו

        lolbimbo אם למעשה יש לי אותם עם שמות שונים, אבל אני משתמש רק באחד לבדיקות מכיוון שאף אחד מהם לא מחזיר את הטקסט שהכנסתי לערך, הוא שולח לי את השגיאה שהוזכרה לעיל:

        אבל בתפוקה אני מקבל את זה:
        (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: הקביעה 'GTK_IS_ENTRY (ערך)' נכשלה

        חוזה (null)

        אני עדיין חוקרת ...

        לחיים. !!

      2.    חירם דיג'ו

        מוכן הנה המקור, ברכות.
        http://pastebin.com/pZG8GbrY

    2.    לולבימבו דיג'ו

      היי חירם, תראה, אני אגיד לך איך אתה צריך לעשות את זה כדי לפתור את זה, הדבר הראשון הוא שאנחנו יוצרים חלון חדש (זה לא הראשי), וכשאתה מתקשר לערך, (סליחה על מילים) החרא הזה לא חוזר כאילו היה ערך אלא יישומון, אבל היי, כדי לפתור את זה אתה רק צריך לשנות את כל המרכיבים הסטטיים שיצרת לדינמי באמצעות var:

      var questionE = Gtk.Entry חדש ();

      ואז הפונקציה תעבוד ותקבל את הטקסט בתוך הערך.

      save.clicked.connect (() => {
      // מחרוזת str = this.questionE.get_text ();
      stdout.printf ("הסכם% s \ n", askE.get_text ());
      });

      לבסוף, אל תשכח לשנות את השורה שבה אתה מוסיף את הערך כדי להציג אותו:

      askE.show ();

      אני משאיר לך את הקוד השלם עם השינוי כדי שתוכל לבדוק שהוא כבר עובד, כלומר אם עליך לשנות את כל האלמנטים (לפחות הערכים) כדי להמשיך ביישום.

      http://paste.desdelinux.net/5048

      לגבי

      1.    חירם דיג'ו

        Chale, כאן מטריד שוב, אני כל הזמן נתקל בבעיות, הקוד שאתה מראה לי הוא בסדר, רק משהו קורה במקרה:

        save.clicked.connect (() => {
        // מחרוזת str = this.questionE.get_text ();
        stdout.printf ("הסכם% s \ n", askE.get_text ());
        });

        זה נמצא בכיתת השאלות וזה עובד בסדר, אבל כשרוצים להיכנס מ- 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 אזהרות

        אני רוצה לחשוב שזה בגלל הדרך בה אני מעביר את הפרמטר כאשר אירוע הקליק מתרחש:
        this.guardar.clicked.connect (this.guardarC);

        תודה מראש על המשוב; כאן אני משאיר את הקוד שמשליך את השגיאה: http://pastebin.com/pLzExhrb

      2.    לולבימבו דיג'ו

        לא בדקתי את זה אבל אני חושב שהסרת הטיעון מהפונקציה תזרוק אותו.

        בטל ציבורי saveC (Gtk.Entry שואל E) {
        מחרוזת str = questionE.get_text ();
        stdout.printf ("הסכם% s \ n", str);
        }

        a:
        בטל ציבורי saveC () {
        מחרוזת str = questionE.get_text ();
        stdout.printf ("הסכם% s \ n", str);
        }

      3.    חירם דיג'ו

        lolbimbo, ניסיתי להסיר את הוויכוח וזה עדיין לא עובד,

        אני עדיין מנסה להבין את הבעיה, אני חדש בוואלה ואינני יכול למצוא תיעוד רב, אני מקווה למצוא את הפיתרון בקרוב או לחכות שתשחרר את החלק הרביעי xD.

        אני ממשיך לנסות ...

        ברכות.