2013-04-18 47 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