2013-04-18 141 views
5

嘗試繪製到畫布GUI元素時出現問題。繪製到畫布%元素

我創建了一個框架,一個畫布,並嘗試使用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

這似乎是解決方案,我現在可以看到一條線。奇怪的是,這在Racket文檔中沒有提及。如果我在'canvas%'類的on-event回調中執行一些繪圖,它會在初始化後立即運行。 – user2295291

+2

請參閱我的答案的鏈接畫布上的文檔<%>。 – soegaard

5

問題是,即使您可以在畫布外部繪製畫布外的畫布,但效果是暫時的。 需要刷新窗口的任何窗口活動(例如移動和調整大小)都可能會清除繪圖。

因此:繪製paint-callback中的所有內容。

#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