The docs here might help elaborate on Matthias's answer: http://docs.racket-lang.org/gui/canvas___.html
I'll try adding more links to that information, including from the `get-dc` method. Maybe it also would be better as its own section in the overview chapter. At Mon, 22 Jun 2015 18:07:04 -0400, Matthias Felleisen wrote: > > [[ I am tempted to say that you misplaced the parentheses and brackets and > broke lines at the wrong place. ]] > > Here is a re-ordering of the first "don't work" variant that kind of works: > > #lang racket > > (require slideshow racket/class racket/gui/base) > > (define my-frame > (new frame% > [label "my frame"] > [width 300] [height 300] > [alignment '(center center)])) > > (define my-canvas (new canvas% [parent my-frame])) > (define my-dc (send my-canvas get-dc)) > (send my-frame show #t) > (draw-pict (circle 60) my-dc 40 40) > (sleep 1) > > Stop! This should give you a hint of why you need to have an callback > function > in this world. > > > > > > > > > > > > > > > > > > > In this world, many different events affect the visible canvas and it needs > to > refresh itself all the time. Omitting the callback says "draw nothing" when > you > refresh. > > > > > On Jun 22, 2015, at 2:17 PM, Mianlai Zhou <mianlai.resea...@gmail.com> wrote: > > > Hi people, > > > > I am wondering why this segment of code failed to work: > > > > ; don't work > > #lang racket > > > > (require slideshow racket/class racket/gui/base) > > > > (define my-frame (new frame% [label "my frame"] > > [width 300] [height 300] > > [alignment '(center center)] )) > > > > (define my-canvas > > (new canvas% [parent my-frame] > > )) > > > > (define my-dc (send my-canvas get-dc)) > > > > (draw-pict (circle 60) my-dc 40 40) > > > > > > (send my-frame show #t) > > > > While the following codes *do* work: > > > > ; do work > > #lang racket > > > > (require slideshow racket/class racket/gui/base) > > > > (define my-frame (new frame% [label "my frame"] > > [width 300] [height 300] > > [alignment '(center center)] )) > > > > (define my-canvas > > (new canvas% [parent my-frame] > > [paint-callback (lambda (self dc) > > (draw-pict (circle 60) dc 40 > 40) > > )] > > )) > > > > (send my-frame show #t) > > > > Is there anyway to avoid using redefining paint-callback to draw one or more > > pictures on the canvas, as in the first example? > > > > Thanks in advance for your answer, > > > > Mianlai > > > > > > -- > > You received this message because you are subscribed to the Google Groups > "Racket Users" group. > > To unsubscribe from this group and stop receiving emails from it, send an > email to racket-users+unsubscr...@googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google Groups > "Racket Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email > to racket-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.