इस भाग में हम देखेंगे कि कैसे एक और विंडो बनाई जाए और इसे GTK के साथ डिज़ाइन किया जाए। हम कुछ कार्यात्मकताओं को भी देखेंगे जैसे प्रश्न जोड़ना और तीन बटन (50%, फ्रीज और पास) का उपयोग करना।
टूलबार और टूलबटन
टूलबार बनाएँ:
टूलबटन बनाना, इस मामले में हम एक आइकन डालेंगे (आप डिफ़ॉल्ट रूप से कई आइकन पा सकते हैं यहां) «from_stock (Gtk.Stock.IconName):
हम देख सकते हैं कि हमारे आवेदन में शीर्ष पर दो बटनों के साथ एक बार है, जहां हम पहले का उपयोग नए प्रश्न बनाने के लिए करेंगे और दूसरा प्रश्न आयात करने के लिए (एक फ़ाइल के माध्यम से):
प्रश्न बनाना:
बटन जो हमने पहले (टूलबार में) बनाया था जब हम उस पर क्लिक करते हैं, हम एक नया gtk विंडो खोलेंगे जो हमें अपने डेटाबेस में प्रश्न जोड़ने की अनुमति देगा:
एक नई विंडो बनाने के लिए हम एक नई क्लास बनाएंगे, जिसे हम क्वेश्चन कहेंगे, और कैसे हमारी ऐप क्लास एक नई विंडो बनाएगी (this.window = new Gtk.Window ();)
हम ग्राफ़िकल इंटरफ़ेस को क्रम में बनाने के लिए कुछ घटकों का उपयोग करेंगे;
-लाब (प्रश्न)
- प्रवेश (जहां हम प्रश्न लिखेंगे)
-लाब (प्रतिक्रियाएँ)
- 4 क्षैतिज बक्से जिसमें एक प्रविष्टि (उत्तर) और एक स्विच होगा (चयन करने के लिए कि यह सही है)
-बटन (पूरा करने के लिए)
हम देख सकते हैं कि यह कैसा दिखता है:
प्रश्न को सहेजने के लिए हमें प्रविष्टियों का पाठ प्राप्त करना होगा, उन्हें get_text () के साथ प्राप्त किया जाता है जो एक स्ट्रिंग लौटाता है।
यह जानने के लिए कि क्या कोई स्विच सक्रिय है, हम इसकी विधि का उपयोग कर सकते हैं सक्रिय बनो () जो चालू होने पर सत्य लौटाता है और बंद होने पर फ्लेस लौटाता है।
50%, फ्रीज और पास बटन:
- पचास%:
50% के लिए हमें केवल यह देखना है कि कौन सा सही बटन है और 2 हटाएं जो सही नहीं हैं, इस मामले में हम उन्हें set_sensitive (गलत) के साथ रद्द करते हैं।
परिणाम:
-फ्रीज:
हमने बार को 0 पर सेट किया।
this.time_bar.set_fraction (0);
-उत्तीर्ण करना:
button3.clicked.connect (() => {
this.bd_select_preguntas ();
this.next_pregunta();
});
अगला भाग (4):
अगली किस्त में हम देखेंगे कि हमारे आवेदन के पहलुओं को कैसे बेहतर बनाया जाए, जैसे कि प्रश्न हमेशा एक ही स्थिति में दिखाई न दें, ऐप पर एक आइकन डालें ...
मुझे जवाब पसंद हैं ... हाहा .. अभिवादन
वला पर ये लेख बहुत अच्छे हैं। मैं दूसरों की प्रतीक्षा कर रहा हूँ। सादर
मैंने वला पर आपकी प्रविष्टि को लंबित कर दिया है, मुझे उम्मीद है कि कई डिलीवरी होंगी। चियर्स!
अच्छा लेख, साझा करने के लिए धन्यवाद।
नमस्कार,
मैंने इस एप्लिकेशन के निर्माण के लिए आपकी पिछली प्रविष्टियों का अनुसरण किया है, अब समस्या यह है कि मैं नई विंडो के प्रवेश का उपयोग करने का प्रयास करता हूं, मैं इसे इस तरह से करता हूं, जिससे 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 हैं, इसलिए यहां मैं पहले से ही खो गया हूं, आप मुझे बेहतर मार्गदर्शन कर सकते हैं।
ठीक है, जब आप प्रविष्टि बनाते हैं तो आप उन्हें वही नाम नहीं देते हैं, जिस पाठ को वे करते हैं, उसे पाने के लिए:
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 = नया 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 त्रुटि (s), 2 चेतावनी (s)
मैं यह सोचना चाहता हूं कि क्लिक इवेंट होने पर मैं पैरामीटर को पास करने के तरीके के कारण:
this.guardar.clicked.connect (this.guardarC);
प्रतिक्रिया के लिए अग्रिम धन्यवाद; यहाँ मैं उस कोड को छोड़ता हूँ जो त्रुटि फेंकता है: http://pastebin.com/pLzExhrb
मैंने इसे आज़माया नहीं है लेकिन मुझे लगता है कि फ़ंक्शन से तर्क को हटाने से यह दूर हो जाएगा।
सार्वजनिक शून्य 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);
}
लोलबिम्बो, मैंने तर्क को हटाने का प्रयास किया है और यह अभी भी काम नहीं कर रहा है,
मैं अभी भी इस समस्या को समझने की कोशिश कर रहा हूं, मैं नया हूं वला और मैं ज्यादा डॉक्यूमेंटेशन नहीं ढूंढ पा रहा हूं, मुझे उम्मीद है कि जल्द ही इसका समाधान ढूंढ लिया जाएगा या आपको चौथे भाग के एक्सडी को रिलीज करने का इंतजार किया जाएगा।
मे कोशीश कर रहा हैं ...
नमस्ते.