2013-04-18 7 views
5

मुझे कैनवास जीयूआई तत्व पर आकर्षित करने का प्रयास करते समय कोई समस्या है।कैनवास% तत्व पर चित्रण

मैं एक फ्रेम, एक कैनवास बनाता हूं और draw-line विधि के साथ कैनवास के डीसी संदर्भ पर आकर्षित करने का प्रयास करता हूं, लेकिन कुछ भी नहीं होता है। कैनवास के साथ फ्रेम दिखाया गया है, लेकिन लाइन कैनवास पर नहीं दिखाया गया है।

(require racket/gui/base) 

(define frame (new frame% [label "Frame"] [width 500] [height 500])) 
(define canvas (new canvas% [parent frame])) 
(define dc (send canvas get-dc)) 

(send dc draw-line 10 10 200 200) 
(send frame show #t) 

क्या कोई जानता है कि मैं ऊपर दिए गए कोड में कहां गलत हूं?

उत्तर

2

इस प्रयास करें:

(require racket/gui/base) 

(define frame (new frame% [label "Frame"] [width 500] [height 500])) 
(define canvas (new canvas% [parent frame])) 
(define dc (send canvas get-dc)) 

(send frame show #t) 
(sleep/yield 1) 
(send dc draw-line 10 10 200 200) 

ऐसा लगता है कि आप पहली फ्रेम दिखाएंगे और फिर थोड़ा इंतज़ार खिड़की तैयार हो जाओ जाने के लिए की जरूरत है।

+2

यह समाधान प्रतीत होता है, अब मैं एक लाइन देख सकता हूं। अजीब बात यह है कि रैकेट दस्तावेज में इसका उल्लेख नहीं है। यदि मैं 'कैनवास%' कक्षा के ऑन-इवेंट कॉलबैक में कुछ चित्रण करता हूं, तो यह इंटिलाइजिंग के बाद तुरंत काम करता है। – user2295291

+2

कैनवास <%> पर प्रलेखन देखें लिंक के लिए मेरा उत्तर देखें। – soegaard

5

समस्या यह है कि भले ही आप के बाहर कैनवास पर कैनवास पर ऑन-पेंट विधि पर कॉल कर सकें, प्रभाव अस्थायी है। खिड़की की ताज़ा करने के लिए खिड़की की आवश्यकता होती है (जैसे चलना, और आकार बदलना) संभावित रूप से आपके ड्राइंग को मिटा सकता है।

इसलिए: पेंट-कॉलबैक के भीतर से सब कुछ खींचे।

#lang racket 
(require racket/gui/base) 

(define frame (new frame% [label "Frame"] [width 500] [height 500])) 
(define canvas (new canvas% 
        [parent frame] 
        [paint-callback 
        (λ(can dc) (send dc draw-line 10 10 200 200))])) 
(define dc (send canvas get-dc)) 
(send frame show #t) 

Documentation on the canvas class अधिक जानकारी के लिए देखें।

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