It was convenient to have something that bypassed the whole gui issue. Since it really is a gui issue, I am not too offended that my own laziness got in my way.
That said, it seemed to me that the use of the new window was a convenience added for just this kind of use, otherwise I would be using a snip, not just slamming a plot up. When plot-new-window? is #t, the call to plot evaluates to void. So it seems that my use case was the point. Without a reference to the new window, "the opposite problem"---if I understood correctly---can't happen. Can it? On Apr 17, 2012 3:12 PM, "Robby Findler" <[email protected]> wrote: > FWIW, I think we'd want somehow, in the library, to show plot windows > in a way that doesn't do any special threading/eventspace stuff, or > else the opposite confusion can happen. > > How about, for this situation, having a function called 'show-plot!' > that takes a plot and puts it into a window in a separate eventspace, > collecting all of the plots? > > Robby > > On Tue, Apr 17, 2012 at 1:16 PM, Matthew Flatt <[email protected]> wrote: > > You could give each frame in its own eventspace. > > > > At Tue, 17 Apr 2012 11:45:20 -0600, Neil Toronto wrote: > >> Would it be possible to change plot so that its windows always behave > >> like this? Could I make it not require cooperation from the program that > >> calls `plot-frame'? > >> > >> This is going to come up every time someone wants to pop up plot windows > >> in a non-GUI, interactive loop. > >> > >> Neil ⊥ > >> > >> On 04/17/2012 10:48 AM, Matthew Flatt wrote: > >> > All GUI activity like window drawing happens only in the main thread > of > >> > an eventspace. Your program also starts out in the main thread. So, > >> > yes, drawing has to wait until your loop completes. > >> > > >> > One solution is to put your loop in a separate thread. The example > >> > below creates a thread and passes it to `yield' to wait until the > >> > thread is done. The `yield' function is special in that it lets other > >> > GUI activity happen while it waits: > >> > > >> > #lang at-exp racket > >> > (require plot > >> > racket/gui/base) > >> > (plot-new-window? #t) > >> > (yield > >> > (thread > >> > (lambda () > >> > (let loop () > >> > (let ((dummy (read))) > >> > (if (and (number? dummy) (zero? dummy)) > >> > (void) > >> > (begin > >> > (plot (function (λ(x) (* x x)) -2 2)) > >> > (loop)))))))) > >> > > >> > Although the above should work, it's not really a good idea to perform > >> > GUI actions outside of the main thread. So, here's an improved version > >> > that uses `queue-callback' to send the `plot' call back to the main > >> > thread: > >> > > >> > #lang at-exp racket > >> > (require plot > >> > racket/gui/base) > >> > (plot-new-window? #t) > >> > (yield > >> > (thread > >> > (lambda () > >> > (let loop () > >> > (let ((dummy (read))) > >> > (if (and (number? dummy) (zero? dummy)) > >> > (void) > >> > (begin > >> > ;; queue a callback instead of `plot' directly: > >> > (queue-callback > >> > (lambda () > >> > (plot (function (λ(x) (* x x)) -2 2)))) > >> > (loop)))))))) > >> > > >> > For more information, see > >> > > >> > > >> > http://docs.racket-lang.org/gui/windowing-overview.html#(part._eventspaceinfo) > >> > > >> > > >> > At Tue, 17 Apr 2012 10:40:55 -0400, Deren Dohoda wrote: > >> >> I was messing around with a spline utility last night and was using > >> >> the plot-new-window? setting to get a plot. The goal was to share an > >> >> exe with a coworker who doesn't have Racket. Just a command-line app > >> >> but to get the plot to display I needed a window and this seemed > >> >> awesome. The problem is I couldn't get the plot to display when the > >> >> thread was in a procedure. The window would appear but it was like > the > >> >> plot backend wasn't free to draw to it. Here's a way to reproduce it > >> >> on v5.2: > >> >> > >> >> #lang at-exp racket > >> >> (require plot) > >> >> (plot-new-window? #t) > >> >> (let loop () > >> >> (let ((dummy (read))) > >> >> (if (and (number? dummy) (zero? dummy)) > >> >> (void) > >> >> (begin > >> >> (plot (function (λ(x) (* x x)) -2 2)) > >> >> (loop))))) > >> >> > >> >> So long as you are looping, new windows will appear without plot > >> >> contents. When you finally quit (here by entering the number zero) > all > >> >> the plots are drawn in those windows. Any help? Did I do something > >> >> horribly dumb? > >> >> > >> >> Thanks, > >> >> Deren > >> >> > >> >> ____________________ > >> >> Racket Users list: > >> >> http://lists.racket-lang.org/users > >> > > >> > ____________________ > >> > Racket Users list: > >> > http://lists.racket-lang.org/users > >> > >> ____________________ > >> Racket Users list: > >> http://lists.racket-lang.org/users > > > > ____________________ > > Racket Users list: > > http://lists.racket-lang.org/users > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users >
____________________ Racket Users list: http://lists.racket-lang.org/users

