2013-04-18 3 views
5

캔버스 GUI 요소에 그릴 때 문제가 있습니다.캔버스 위로 그리기 % 요소

프레임, 캔버스를 만들고 draw-line 메서드로 캔버스의 DC 컨텍스트에서 그리려고하지만 아무 일도 발생하지 않습니다. 캔버스가있는 프레임이 표시되지만 선은 캔바스에 표시되지 않습니다.

(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

이것은 해결책 인 것 같습니다. 지금은 한 줄을 볼 수 있습니다. 이상하게도 Racket 문서에 언급되어 있지 않습니다. 'canvas %'클래스의 on-event 콜백에서 일부 드로잉을 수행하면 intialising 후에 즉시 작동합니다. – 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을 참조하십시오.