בחלק זה נראה כיצד ליצור חלון נוסף ולעצב אותו בעזרת GTK. נראה גם כמה פונקציות כגון הוספת שאלות ושימוש בשלושת הכפתורים (50%, הקפאה והעברה).
סרגל הכלים וכפתור הכלים
צור סרגל כלים:
יצירת כפתור כלים, במקרה זה אנו שמים סמל (ניתן למצוא סמלים רבים כברירת מחדל כאן) עם «from_stock (Gtk.Stock.IconName):
אנו יכולים לראות שבאפליקציה שלנו יש סרגל עם שני כפתורים בחלקו העליון, שם נשתמש בראשון ליצירת שאלות חדשות ובשני לייבוא שאלות (באמצעות קובץ):
יצירת שאלות:
הכפתור שיצרנו בעבר (בסרגל הכלים) כאשר אנו לוחצים עליו נפתח חלון gtk חדש שיאפשר לנו להוסיף שאלות למסד הנתונים שלנו:
כדי ליצור חלון חדש ניצור מחלקה חדשה, אותה נקרא שאלות וכיצד מחלקת האפליקציות שלנו תיצור חלון חדש (this.window = Gtk.Window חדש ();)
נשתמש בכמה רכיבים כדי ליצור את הממשק הגרפי לפי הסדר;
-תווית (שאלות)
- כניסה (שם נכתוב את השאלה)
-תווית (תגובות)
- 4 תיבות אופקיות שיכילו ערך (התשובה) ומתג (כדי לבחור אם זה נכון)
כפתור (להשלמה)
אנחנו יכולים לראות איך זה נראה:
כדי לשמור את השאלה נצטרך להשיג את טקסט הערכים, הם מתקבלים באמצעות get_text () המחזירה מחרוזת.
כדי לדעת אם מתג פעיל אנו יכולים להשתמש בשיטה שלו להיות פעיל () אשר מחזיר אמת אם הוא פועל ומתפנה אם הוא כבוי.
50%, כפתורי הקפאה ומעבר:
-חמישים% :
עבור 50% עלינו רק לבדוק מהו הכפתור הנכון ולהסיר 2 שאינם נכונים, במקרה זה אנו מבטלים אותם עם set_sensitive (false).
תוצאה:
-הַקפָּאָה:
הגדרנו את הרף שוב ל -0.
this.timebar.set_fraction (0);
-לַעֲבוֹר:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
החלק הבא (4):
בפרק הבא נראה כיצד לשפר היבטים של היישום שלנו, כמו למשל שהשאלות לא תמיד מופיעות באותו מיקום, שמים אייקון לאפליקציה ...
אני אוהב את התשובות ... חח .. ברכות
טוב מאוד המאמרים האלה על ואלה .. אני מקווה שהאחרים .. ברכות
אני ממתין לכניסה שלך לוואלה, אני מקווה שיש הרבה משלוחים. לחיים!
כתבה נחמדה, תודה על השיתוף.
שלום,
עקבתי אחר הערכים הקודמים שלך ליצירת אפליקציה זו, הבעיה מגיעה כעת כשאני מנסה לגשת לערכי החלון החדש, אני עושה זאת בדרך זו, בשיטת 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, אז הנה אני כבר אבוד, אתה יכול להנחות אותי טוב יותר.
ובכן, כשאתה יוצר את הערכים אתה לא נותן להם את אותו השם, כדי לקבל את הטקסט שיש לך:
r1 = entry1.get_text();
r2 = entry2.get_text();
r3 = entry3.get_text();
r4 = entry4.get_text();
אם תרצה, שים פח אגן ואני אסתכל עליו
lolbimbo אם למעשה יש לי אותם עם שמות שונים, אבל אני משתמש רק באחד לבדיקות מכיוון שאף אחד מהם לא מחזיר את הטקסט שהכנסתי לערך, הוא שולח לי את השגיאה שהוזכרה לעיל:
אבל בתפוקה אני מקבל את זה:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: הקביעה 'GTK_IS_ENTRY (ערך)' נכשלה
חוזה (null)
אני עדיין חוקרת ...
לחיים. !!
מוכן הנה המקור, ברכות.
http://pastebin.com/pZG8GbrY
היי חירם, תראה, אני אגיד לך איך אתה צריך לעשות את זה כדי לפתור את זה, הדבר הראשון הוא שאנחנו יוצרים חלון חדש (זה לא הראשי), וכשאתה מתקשר לערך, (סליחה על מילים) החרא הזה לא חוזר כאילו היה ערך אלא יישומון, אבל היי, כדי לפתור את זה אתה רק צריך לשנות את כל המרכיבים הסטטיים שיצרת לדינמי באמצעות 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
לגבי
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
לא בדקתי את זה אבל אני חושב שהסרת הטיעון מהפונקציה תזרוק אותו.
בטל ציבורי saveC (Gtk.Entry שואל E) {
מחרוזת str = questionE.get_text ();
stdout.printf ("הסכם% s \ n", str);
}
a:
בטל ציבורי saveC () {
מחרוזת str = questionE.get_text ();
stdout.printf ("הסכם% s \ n", str);
}
lolbimbo, ניסיתי להסיר את הוויכוח וזה עדיין לא עובד,
אני עדיין מנסה להבין את הבעיה, אני חדש בוואלה ואינני יכול למצוא תיעוד רב, אני מקווה למצוא את הפיתרון בקרוב או לחכות שתשחרר את החלק הרביעי xD.
אני ממשיך לנסות ...
ברכות.