إنشاء تطبيق (Vala + GTK 3) [الجزء الثالث]

سنرى في هذا الجزء كيفية إنشاء نافذة أخرى وتصميمها باستخدام GTK. سنرى أيضًا بعض الوظائف مثل إضافة الأسئلة واستخدام الأزرار الثلاثة (50٪ ، تجميد واجتياز).

ToolBar و ToolButton

قم بإنشاء شريط أدوات:

app2

إنشاء ToolButton ، في هذه الحالة سنضع رمزًا (يمكنك العثور على العديد من الرموز افتراضيًا هنا) مع «from_stock (Gtk.Stock.IconName):

لقطة من 2013/12/07 23:26:52

يمكننا أن نرى أنه في تطبيقنا لدينا في الجزء العلوي شريط به زرين ، حيث سنستخدم الأول لإنشاء أسئلة جديدة والثاني لاستيراد الأسئلة (من خلال ملف):

لقطة من 2013/11/08 00:30:32

تكوين الأسئلة:
الزر الذي أنشأناه سابقًا (في شريط الأدوات) عندما نضغط عليه ، سنفتح نافذة gtk جديدة تسمح لنا بإضافة أسئلة إلى قاعدة بياناتنا:

app1

لإنشاء نافذة جديدة ، سننشئ فئة جديدة ، والتي سنطلق عليها أسئلة ، وكيف ستنشئ فئة التطبيقات لدينا نافذة جديدة (this.window = new Gtk.Window () ؛)

سنستخدم بعض المكونات لإنشاء واجهة رسومية بالترتيب ؛

- التسمية (الأسئلة)

- دخول (حيث نكتب السؤال)

-Label (الردود)

- 4 مربعات أفقية تحتوي على إدخال (الإجابة) ومفتاح (لتحديد ما إذا كان هو الصحيح)

-زر (للإكمال)

يمكننا أن نرى كيف يبدو:

لقطة من 2013/12/08 01:07:08

لحفظ السؤال ، سيتعين علينا الحصول على نص المدخلات ، يتم الحصول عليها باستخدام get_text () الذي يقوم بإرجاع سلسلة.

app5

لمعرفة ما إذا كان المحول نشطًا ، يمكننا استخدام طريقته get_active () الذي يعود صحيحًا إذا كان قيد التشغيل و flase إذا كان مغلقًا.

 50٪ ، أزرار التجميد والتمرير:

 - خمسون٪:

بالنسبة لـ 50٪ ، يتعين علينا فقط البحث عن الزر الصحيح وإزالة 2 غير الصحيحة ، وفي هذه الحالة نقوم بإلغائها باستخدام set_sensitive (false).

app4

النتيجة:

app6

-تجميد:

قمنا بتعيين الشريط على 0 مرة أخرى.

this.timebar.set_fraction (0) ،

-يمر:

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

 الجزء التالي (4):

في الدفعة التالية سنرى كيفية تحسين جوانب تطبيقنا ، مثل أن الأسئلة لا تظهر دائمًا في نفس الموضع ، ضع رمزًا على التطبيق ...


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   f3niX قال

    أحب الأجوبة ... هاها .. تحياتي

  2.   بانشومورا قال

    هذه المقالات جيدة جدا عن فالا .. اتمنى الاخرين .. تحياتي

  3.   cr0t0 قال

    لدي انتظار دخولك إلى Vala ، وآمل أن يكون هناك العديد من عمليات التسليم. في صحتك!

  4.   com.pptru قال

    مقال جميل شكرا للمشاركة.

  5.   حيرام قال

    مرحبا،

    لقد اتبعت إدخالاتك السابقة لإنشاء هذا التطبيق ، تأتي المشكلة الآن حيث أحاول الوصول إلى إدخالات النافذة الجديدة ، أفعل ذلك بهذه الطريقة ، في طريقة 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 ، لذلك أنا هنا ضائع ، يمكنك أن ترشدني بشكل أفضل.

    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 (إدخال)"

        المعاهدة (باطلة)

        ما زلت أحقق ...

        في صحتك.!!

      2.    حيرام قال

        جاهز هنا هو المصدر ، تحياتي.
        http://pastebin.com/pZG8GbrY

    2.    لولبيمبو قال

      مرحبًا حيرام ، انظر ، سأخبرك كيف عليك القيام بذلك لحلها ، أول شيء هو أننا نقوم بإنشاء نافذة جديدة (ليست النافذة الرئيسية) ، وعند استدعاء الإدخال ، (آسف على كلمات) لا أعرف لماذا لا يعود هذا الهراء كما لو كان إدخالًا ولكنه عنصر واجهة مستخدم ، ولكن مهلا ، لحلها ، عليك فقط تغيير جميع المكونات الثابتة التي أنشأتها إلى ديناميكية باستخدام 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

      تحياتي

      1.    حيرام قال

        شالي ، هنا يزعجني مرة أخرى ، ما زلت أواجه مشاكل ، الرمز الذي تعرضه لي جيد ، فقط شيء ما يحدث في الحدث:

        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

      2.    لولبيمبو قال

        لم أجربها ولكني أعتقد أن إزالة الحجة من الوظيفة سوف تلغيها.

        حفظ باطل عام (Gtk.Entry يطلب E) {
        سلسلة str = questionE.get_text () ؛
        stdout.printf ("المعاهدة٪ s \ n"، str)؛
        }

        a:
        حفظ عام باطل C () {
        سلسلة str = questionE.get_text () ؛
        stdout.printf ("المعاهدة٪ s \ n"، str)؛
        }

      3.    حيرام قال

        lolbimbo ، لقد حاولت إزالة الحجة وما زالت لا تعمل ،

        ما زلت أحاول فهم المشكلة ، فأنا جديد على Vala ولا يمكنني العثور على الكثير من الوثائق ، وآمل أن أجد الحل قريبًا أو أنتظر إصدار الجزء الرابع xD.

        ما زلت أحاول ...

        تحية.