6

尝试在画布 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)

有人知道我在上面的代码中哪里错了吗?

4

2 回答 2

7

问题在于,即使您可以在画布的 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)

有关更多信息,请参阅canvas 类的文档

于 2013-04-18T15:07:33.407 回答
1

尝试这个:

(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)

看来您需要先显示框架,然后稍等片刻让窗口准备好。

于 2013-04-18T14:03:23.217 回答