绘制到canvas%元素

时间:2013-04-18 13:44:52

标签: canvas drawing scheme racket

尝试绘制画布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 个答案:

答案 0 :(得分:5)

问题是即使你可以在外面的画布上画画 调用画布的on-paint方法,效果是暂时的。 任何需要刷新窗口(例如移动和调整大小)的窗口活动都可能会擦除您的绘图。

因此:从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

答案 1 :(得分: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)

您似乎需要首先显示框架,然后等待一段时间让窗口准备就绪。