ऐप बनाना (Vala + GTK 3) [तीसरा भाग]

इस भाग में हम देखेंगे कि कैसे एक और विंडो बनाई जाए और इसे GTK के साथ डिज़ाइन किया जाए। हम कुछ कार्यात्मकताओं को भी देखेंगे जैसे प्रश्न जोड़ना और तीन बटन (50%, फ्रीज और पास) का उपयोग करना।

टूलबार और टूलबटन

टूलबार बनाएँ:

APP2

टूलबटन बनाना, इस मामले में हम एक आइकन डालेंगे (आप डिफ़ॉल्ट रूप से कई आइकन पा सकते हैं यहां) «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

यह जानने के लिए कि क्या कोई स्विच सक्रिय है, हम इसकी विधि का उपयोग कर सकते हैं सक्रिय बनो () जो चालू होने पर सत्य लौटाता है और बंद होने पर फ्लेस लौटाता है।

 50%, फ्रीज और पास बटन:

 - पचास%:

50% के लिए हमें केवल यह देखना है कि कौन सा सही बटन है और 2 हटाएं जो सही नहीं हैं, इस मामले में हम उन्हें set_sensitive (गलत) के साथ रद्द करते हैं।

APP4

परिणाम:

APP6

-फ्रीज:

हमने बार को 0 पर सेट किया।

this.time_bar.set_fraction (0);

-उत्तीर्ण करना:

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

 अगला भाग (4):

अगली किस्त में हम देखेंगे कि हमारे आवेदन के पहलुओं को कैसे बेहतर बनाया जाए, जैसे कि प्रश्न हमेशा एक ही स्थिति में दिखाई न दें, ऐप पर एक आइकन डालें ...


अपनी टिप्पणी दर्ज करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। आवश्यक फ़ील्ड के साथ चिह्नित कर रहे हैं *

*

*

  1. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।

  1.   f3niX कहा

    मुझे जवाब पसंद हैं ... हाहा .. अभिवादन

  2.   पंचमोरा कहा

    वला पर ये लेख बहुत अच्छे हैं। मैं दूसरों की प्रतीक्षा कर रहा हूँ। सादर

  3.   cr0t0 कहा

    मैंने वला पर आपकी प्रविष्टि को लंबित कर दिया है, मुझे उम्मीद है कि कई डिलीवरी होंगी। चियर्स!

  4.   पुत्तरु कहा

    अच्छा लेख, साझा करने के लिए धन्यवाद।

  5.   हीराम कहा

    नमस्कार,

    मैंने इस एप्लिकेशन के निर्माण के लिए आपकी पिछली प्रविष्टियों का अनुसरण किया है, अब समस्या यह है कि मैं नई विंडो के प्रवेश का उपयोग करने का प्रयास करता हूं, मैं इसे इस तरह से करता हूं, जिससे createQuestions क्लास (विंडो बनाने वाला वर्ग) के saveC विधि में ।

    सार्वजनिक शून्य saveC () {
    string str = questionE.get_text ();
    stdout.printf ("संधि% s \ n", str);
    }

    लेकिन आउटपुट पर मुझे यह मिलता है:
    (bu: 6196): Gtk-CRITICAL **: gtk_entry_get_text: दावा `GTK_IS_ENTRY (प्रविष्टि) 'विफल

    संधि (अशक्त)

    मैंने कुछ उदाहरण देखे हैं और उन तरीकों की परिभाषा में जो प्रवेश करते हैं वे इस तरह से करते हैं:

    शून्य 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 (प्रविष्टि) 'विफल

        संधि (अशक्त)

        मैं अभी भी जांच कर रहा हूं ...

        चियर्स। !!

      2.    हीराम कहा

        यहां तैयार है स्रोत, अभिवादन।
        http://pastebin.com/pZG8GbrY

    2.    लोलिम्बो कहा

      हाय हीराम, देखो, मैं तुम्हें बताता हूँ कि तुम्हें कैसे करना है-इसे हल करने के लिए, पहली बात यह होती है क्योंकि हम एक नई विंडो बना रहे हैं (यह मुख्य एक नहीं है), और प्रवेश कॉल करते समय, ( शब्दों के लिए खेद है) मुझे नहीं पता कि वह बकवास क्यों नहीं लौटता है क्योंकि यह एक प्रविष्टि थी लेकिन एक विजेट, लेकिन हे, लेकिन इसे हल करने के लिए आपको बस उन सभी स्थिर घटकों को बदलना होगा जिन्हें आपने 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.    हीराम कहा

        चले, यहाँ पर फिर से परेशान कर रहा हूँ, मुझे समस्या हो रही है, जो कोड आप मुझे दिखाते हैं वह ठीक है, केवल घटना में कुछ होता है:

        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 त्रुटि (s), 2 चेतावनी (s)

        मैं यह सोचना चाहता हूं कि क्लिक इवेंट होने पर मैं पैरामीटर को पास करने के तरीके के कारण:
        this.guardar.clicked.connect (this.guardarC);

        प्रतिक्रिया के लिए अग्रिम धन्यवाद; यहाँ मैं उस कोड को छोड़ता हूँ जो त्रुटि फेंकता है: http://pastebin.com/pLzExhrb

      2.    लोलिम्बो कहा

        मैंने इसे आज़माया नहीं है लेकिन मुझे लगता है कि फ़ंक्शन से तर्क को हटाने से यह दूर हो जाएगा।

        सार्वजनिक शून्य 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.    हीराम कहा

        लोलबिम्बो, मैंने तर्क को हटाने का प्रयास किया है और यह अभी भी काम नहीं कर रहा है,

        मैं अभी भी इस समस्या को समझने की कोशिश कर रहा हूं, मैं नया हूं वला और मैं ज्यादा डॉक्यूमेंटेशन नहीं ढूंढ पा रहा हूं, मुझे उम्मीद है कि जल्द ही इसका समाधान ढूंढ लिया जाएगा या आपको चौथे भाग के एक्सडी को रिलीज करने का इंतजार किया जाएगा।

        मे कोशीश कर रहा हैं ...

        नमस्ते.