2010-09-09 11 views
7

मैं वर्तमान में एक पीईजीटीके आवेदन लिख रहा हूं और मुझे अपने आवेदन को ढूढ़ने के सर्वोत्तम तरीके के बारे में कुछ सलाह चाहिए। असल में एप्लिकेशन एक विशिष्ट फ़ाइल विनिर्देश पढ़ेगा और संपादन के लिए इसे जीयूआई में प्रस्तुत करेगा।पायथन जीटीके + एप्लिकेशन लिखने का 'अच्छा अभ्यास' तरीका क्या है?

वर्तमान में मैं एक parser.py जो संभालती सभी निम्न स्तर फ़ाइल आईओ और फ़ाइल को पार्स है। मैं एक वृक्षदृश्य में फ़ाइल की सामग्री प्रदर्शित कर रहा हूं, जिसका अर्थ है कि मुझे अपने डेटा प्रकार के रूप में एक ट्रेस्टोर का उपयोग करने की आवश्यकता है।

समस्या मैं में भाग लिया है कि मैं केवल इस समस्या का दो समाधान के बारे में सोचा गया है। पहला यह है कि मेरा पार्सर एक ट्रेस्टोर का निर्माण कर सकता है और इसे अपनी यूई कक्षा में भेज सकता है। इसके लिए pygtk के आधार पर मेरे पार्सर की आवश्यकता होती है, और कक्षा के संभावित पुन: उपयोग को कम करता है। दूसरा पार्सर में मेरी यूई क्लास का संदर्भ संग्रहीत करेगा, जो संभावित रूप से एक स्टैंडअलोन लाइब्रेरी के रूप में मेरे पार्सर क्लास के पुन: उपयोग को सीमित कर देगा।

एक छोटी एक लाइनर में मेरे सवाल का गाढ़ा करने के लिए: वहाँ एक और अधिक pythonic या OO के अनुकूल तरीके से अपने लक्ष्यों को पूरा करने के लिए एक रास्ता है?

अगर मेरे कोड को देखकर किसी को भी मेरे सवाल का जवाब करने की कोशिश कर में मदद मिलेगी: https://code.launchpad.net/~blainepace/nbtparser/trunk

अन्य pythonic सुझावों का स्वागत है, यह मेरी पहली अजगर कार्यक्रम है और मैं एक और अधिक सी ++ सोच की शैली में फंस जा सकता है। मैं इसे बहुत से refactoring पर योजना है।

उत्तर

4

आपने निर्देश "Sub-classing GObject in Python" पर एक नज़र रखना चाहिए। यह सिग्नल और गुण बनाने के लिए गोब्जेक्ट के प्रकार प्रणाली का उपयोग करके चला जाता है, जो आपको अंतर्निहित व्यवहार को ऐसे तरीके से मॉडल करने की अनुमति देता है जो सामान्य पीईजीटीके अर्थशास्त्र (सिग्नल से जुड़ना, संपत्ति अधिसूचनाओं की प्रतीक्षा आदि) के साथ एकीकृत करना आसान है।

दोनों अपने पार्सर और यूआई केवल गुण और संकेतों से कनेक्ट करने के होना चाहिए। फिर आपके पास एक तिहाई कक्षा है जो इन संकेतों और कॉलबैक को जोड़ती है और if __name__ == __main__ ब्लॉक में मुख्य पाश शुरू करती है। आपका मुख्य लिपि में

class MyApp(gtk.Window): 

    def __init__(self, parser, ui): 
     gtk.Window.__init__(self) 
     parser.connect("some-signal", ui.update_this) 
     parser.connect("some-other-signal", ui.update_that, extra_params) 
     ui.connect("refresh-clicked", parser.reparse_file) 
     self.add(ui) 

... और फिर:

आमतौर पर, मेरा कुछ इस तरह दिखाई

parser = parser.Parser(...) 
ui = view.ParseView(...) 
app = MyApp(parser, ui) 

app.show_all() 

gtk.main() 
बेशक

, इस पर निर्भर करता है जैसे अक्सर अलग है। क्या मैं ग्लेड का उपयोग कर रहा हूँ? क्या मैं मुख्य ऐप के लिए विगेट्स को उप-वर्ग करता हूं या उन्हें लपेटता हूं? आदि

इस बारे में महान बात यह है कि आप तो लिख सकते हैं, कहते हैं, एक परीक्षण पार्सर कि कुछ नहीं करता है लेकिन लौट पूर्व क्रमादेशित प्रतिक्रियाओं, या एक ज्ञात परीक्षण फ़ाइल का उपयोग करता है। इसे स्वैप करना उतना आसान है जितना ऊपर एक पंक्ति को बदलना:

parser = parser.DummyParser(...) 
+0

धन्यवाद, आपने मुझे सही दिशा में इंगित किया। – sensae

संबंधित मुद्दे