سنرى في هذا الجزء كيفية إنشاء نافذة أخرى وتصميمها باستخدام GTK. سنرى أيضًا بعض الوظائف مثل إضافة الأسئلة واستخدام الأزرار الثلاثة (50٪ ، تجميد واجتياز).
ToolBar و ToolButton
قم بإنشاء شريط أدوات:
إنشاء ToolButton ، في هذه الحالة سنضع رمزًا (يمكنك العثور على العديد من الرموز افتراضيًا هنا) مع «from_stock (Gtk.Stock.IconName):
يمكننا أن نرى أنه في تطبيقنا لدينا في الجزء العلوي شريط به زرين ، حيث سنستخدم الأول لإنشاء أسئلة جديدة والثاني لاستيراد الأسئلة (من خلال ملف):
تكوين الأسئلة:
الزر الذي أنشأناه سابقًا (في شريط الأدوات) عندما نضغط عليه ، سنفتح نافذة gtk جديدة تسمح لنا بإضافة أسئلة إلى قاعدة بياناتنا:
لإنشاء نافذة جديدة ، سننشئ فئة جديدة ، والتي سنطلق عليها أسئلة ، وكيف ستنشئ فئة التطبيقات لدينا نافذة جديدة (this.window = new Gtk.Window () ؛)
سنستخدم بعض المكونات لإنشاء واجهة رسومية بالترتيب ؛
- التسمية (الأسئلة)
- دخول (حيث نكتب السؤال)
-Label (الردود)
- 4 مربعات أفقية تحتوي على إدخال (الإجابة) ومفتاح (لتحديد ما إذا كان هو الصحيح)
-زر (للإكمال)
يمكننا أن نرى كيف يبدو:
لحفظ السؤال ، سيتعين علينا الحصول على نص المدخلات ، يتم الحصول عليها باستخدام get_text () الذي يقوم بإرجاع سلسلة.
لمعرفة ما إذا كان المحول نشطًا ، يمكننا استخدام طريقته get_active () الذي يعود صحيحًا إذا كان قيد التشغيل و flase إذا كان مغلقًا.
50٪ ، أزرار التجميد والتمرير:
- خمسون٪:
بالنسبة لـ 50٪ ، يتعين علينا فقط البحث عن الزر الصحيح وإزالة 2 غير الصحيحة ، وفي هذه الحالة نقوم بإلغائها باستخدام set_sensitive (false).
النتيجة:
-تجميد:
قمنا بتعيين الشريط على 0 مرة أخرى.
this.timebar.set_fraction (0) ،
-يمر:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
الجزء التالي (4):
في الدفعة التالية سنرى كيفية تحسين جوانب تطبيقنا ، مثل أن الأسئلة لا تظهر دائمًا في نفس الموضع ، ضع رمزًا على التطبيق ...
أحب الأجوبة ... هاها .. تحياتي
هذه المقالات جيدة جدا عن فالا .. اتمنى الاخرين .. تحياتي
لدي انتظار دخولك إلى Vala ، وآمل أن يكون هناك العديد من عمليات التسليم. في صحتك!
مقال جميل شكرا للمشاركة.
مرحبا،
لقد اتبعت إدخالاتك السابقة لإنشاء هذا التطبيق ، تأتي المشكلة الآن حيث أحاول الوصول إلى إدخالات النافذة الجديدة ، أفعل ذلك بهذه الطريقة ، في طريقة saveC لفئة createQuestions (الفئة التي تنشئ النافذة).
حفظ عام باطل C () {
سلسلة str = questionE.get_text () ؛
stdout.printf ("المعاهدة٪ s \ n"، str)؛
}
لكن عند الإخراج أحصل على هذا:
(bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: فشل التأكيد "GTK_IS_ENTRY (إدخال)"
المعاهدة (باطلة)
لقد رأيت بعض الأمثلة وفي تعريف الطرق التي تصل إلى الإدخالات يفعلون شيئًا كالتالي:
void on_activate (إدخال Gtk.Entry) {
الاسم = entry.get_text () ؛
طباعة ("\ n Hello" + name + "! \ 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 (إدخال)"
المعاهدة (باطلة)
ما زلت أحقق ...
في صحتك.!!
جاهز هنا هو المصدر ، تحياتي.
http://pastebin.com/pZG8GbrY
مرحبًا حيرام ، انظر ، سأخبرك كيف عليك القيام بذلك لحلها ، أول شيء هو أننا نقوم بإنشاء نافذة جديدة (ليست النافذة الرئيسية) ، وعند استدعاء الإدخال ، (آسف على كلمات) لا أعرف لماذا لا يعود هذا الهراء كما لو كان إدخالًا ولكنه عنصر واجهة مستخدم ، ولكن مهلا ، لحلها ، عليك فقط تغيير جميع المكونات الثابتة التي أنشأتها إلى ديناميكية باستخدام var:
var questionE = new 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
تحياتي
شالي ، هنا يزعجني مرة أخرى ، ما زلت أواجه مشاكل ، الرمز الذي تعرضه لي جيد ، فقط شيء ما يحدث في الحدث:
save.clicked.connect (() => {
// string 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
لم أجربها ولكني أعتقد أن إزالة الحجة من الوظيفة سوف تلغيها.
حفظ باطل عام (Gtk.Entry يطلب E) {
سلسلة str = questionE.get_text () ؛
stdout.printf ("المعاهدة٪ s \ n"، str)؛
}
a:
حفظ عام باطل C () {
سلسلة str = questionE.get_text () ؛
stdout.printf ("المعاهدة٪ s \ n"، str)؛
}
lolbimbo ، لقد حاولت إزالة الحجة وما زالت لا تعمل ،
ما زلت أحاول فهم المشكلة ، فأنا جديد على Vala ولا يمكنني العثور على الكثير من الوثائق ، وآمل أن أجد الحل قريبًا أو أنتظر إصدار الجزء الرابع xD.
ما زلت أحاول ...
تحية.