2012-07-09 21 views
12

मैं पाइथन और gnomecanvas का उपयोग कर एक साधारण ड्राइंग अनुप्रयोग बनाने की कोशिश कर रहा हूँ। अफसोस की बात है कि, gnomecanvas के लिए पाइथन बाइंडिंग के लिए कोई प्रलेखन प्रतीत नहीं होता है। इस प्रकार, मैं कोड नमूने का उपयोग करके और सी बाइंडिंग से अनुमान लगाने की कोशिश कर रहा हूं।क्या Python में मौजूदा gnome canvas bpath में शामिल करने का कोई तरीका है?

यह है के रूप में, मैं प्रत्येक नए आइटम पर इस सूची में से एक स्ट्रोक में वर्तमान बिंदुओं की एक सूची रखने और एक नया पथ वस्तु उत्पन्न करके काम कर कोड है:

def get_pointer_coords(self, event): 
    return self.window_to_world(event.x, event.y) 

def render_path(self): 
    path_def = gnomecanvas.path_def_new(self.cur_path) 
    self.current_item.set_bpath(path_def) 

def button_press(self, event): 
    is_core = event.device is gdk.device_get_core_pointer() 
    if is_core: 
     return 
    self.drawing = True 
    (x, y) = self.get_pointer_coords(event) 
    self.cur_path = [(gnomecanvas.MOVETO_OPEN, x, y)] 
    self.current_item = self.root().add(gnomecanvas.CanvasBpath 
             , outline_color="#A6E22E" 
             , width_pixels=1 
             , cap_style=gdk.CAP_ROUND 
             ) 

def button_release(self, event): 
    self.drawing = False 

def motion_notify(self, event): 
    is_core = event.device is gdk.device_get_core_pointer() 
    if not is_core and self.drawing: 
     (x, y) = self.get_pointer_coords(event) 
     self.cur_path.append((gnomecanvas.LINETO, x, y)) 
     self.render_path() 

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

मेरा प्रश्न है: क्या कोई तरीका है जिसके द्वारा मैं प्रत्येक पॉइंटर गति पर मौजूदा बीपीएथ में बस जोड़ सकता हूं जैसा कि मैं इस पुस्तकालय के सी संस्करण में करता हूं?

संबंधित नोट पर, इस एपीआई के लिए कोई दस्तावेज है क्योंकि मैंने गुगलिंग के घंटों का काम किया है जिसने मुझे बदले में कुछ भी नहीं दिया है।

उत्तर

1

देशी सी एपीआई पर libgnomecavas 2.3 दस्तावेज अच्छा है, जिसमें सभी सी कार्यों के लिए gnomecanvas के साथ काम करने के लिए विवरण शामिल है।

पायथन बाइंडिंग सामान्य रूप से सभी वर्णित एपीआई का खुलासा नहीं करते हैं, और विशेष रूप से आपके वांछित कार्यों का खुलासा नहीं करते हैं, और ग्नोम कैनवास के लिए पाइथन बाइंडिंग पर कोई दस्तावेज नहीं है, सभी बलों को जीनोम 3 से संबंधित चीजों को विकसित करने के लिए भेजा गया था (आप इसे एक्सप्लोर कर सकते हैं live.gnome.org)।

एक और बात यह है कि gnomecavas काफी पुराना है और पायथन बाइंडिंग भी है; और भविष्य में उनका समर्थन करने की कोई योजना नहीं है (उदाहरण के लिए उबंटू के पिछले कई संस्करणों में इस पैकेज को संस्करण में संस्करण से किसी भी बदलाव के बिना कॉपी किया जा रहा है)।

लेकिन गोवाकानस नामक एक और कैनवास लाइब्रेरी है जो स्क्रीन पर ड्रॉ करने के लिए काहिरा का उपयोग करती है और PyGooCanvas पायथन बाइंडिंग और पिटीवी जैसी कुछ व्यापक परियोजनाओं द्वारा उपयोग की जाने वाली अधिक अद्यतित प्रतीत होती है।