【问题标题】:Big-Bang and Dialog Application (Racket/Scheme)Big-Bang 和对话应用程序(球拍/方案)
【发布时间】:2012-04-24 09:45:00
【问题描述】:

所以我正在尝试编写一个同时使用big-bang(参见2htdp/universe)函数和对话框(参见racket/gui/base)的程序。我的问题是我想要它让程序同时显示两个窗口,但是我很难弄清楚这部分,因为这两个功能都必须“关闭/完成”让代码继续。这是我尝试过的,但没有运气(由于之前所说的):

#lang racket

(require 2htdp/universe
         racket/gui/base)

(define dialog (instantiate dialog% ("Title")))
(define (render data)
   ...)

(define main
   (begin
      (big-bang ...
         (on-draw render))
      (send dialog show #t)))

使用此示例 [模板] 代码,big-bang 应用程序首先显示,为了显示对话框,您必须关闭 big-bang 应用程序。重申一下,我希望能够同时显示它们。

如果您想了解有关该问题的更多信息,请告诉我。提前感谢您的帮助。

【问题讨论】:

    标签: user-interface dialog scheme racket


    【解决方案1】:

    您可以在单独的线程 中运行它们,并使用它们自己的事件空间,这样可以防止它们相互阻塞。你期待两者之间会有交流吗?

    这是一个例子:

    #lang racket
    
    (require 2htdp/universe
             2htdp/image
             racket/gui/base)
    
    ;; start-dialog: -> void
    (define (start-dialog)
      (define dialog (new dialog% [label "A sample title"]))
      (send dialog show #t))
    
    ;; start-up-big-bang: -> number
    (define (start-up-big-bang)
      (big-bang 0
                (on-tick add1 1)
                (to-draw draw)))
    
    ;; draw: number -> image
    (define (draw w)
      (text (format "I see my number is: ~a" w) 20 "black"))
    
    ;; We create fresh eventspaces for each.
    ;; See: http://docs.racket-lang.org/gui/windowing-overview.html#(part._eventspaceinfo)
    ;; for more details.
    (define c1 (make-eventspace))
    (define c2 (make-eventspace))
    
    ;; And now we can spawn off these two to run concurrently.
    (define t1 (parameterize ([current-eventspace c1])
                 (thread start-up-big-bang)))
    (define t2 (parameterize ([current-eventspace c2])
                 (thread start-dialog)))
    
    ;; Let's wait till both the big-bang and the dialog have closed.
    (thread-wait t1)
    (thread-wait t2)
    

    【讨论】:

    • 有道理。我不太确定我是否会让他们直接沟通,但很有可能。如果是这样的话,使用这种方法会有什么问题吗?
    • 我不得不承认,我还不太清楚如何让 big-bang Universe 程序与球拍/gui 程序对话:它们的预期用途是作为初学者友好的简单独立应用程序。如果你需要更多实质性的东西,仅仅停留在球拍/gui程序中似乎更灵活。您可以在球拍/gui 中获得看起来与世界相似的东西。例如,请参阅:stackoverflow.com/questions/8402218/…
    • 好的。这是我第一次搞砸racket/gui,所以我使用 big-bang 只是因为我有经验。如果我可以仅使用球拍/gui 程序实现相同的目标(能够绘制绘图(使用plot)和线条/其他形状),那么我肯定会使用它们。
    • 是的,您应该能够将来自2htdp/image library 和PLoT 的图像绘制到racket/gui 的画布中。使用 mrlib/image-core docs.racket-lang.org/mrlib/Image_Core.html 中的 render-image 函数来执行此操作。
    猜你喜欢
    • 2012-09-25
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 2021-12-21
    • 2012-11-12
    • 2019-10-27
    • 1970-01-01
    相关资源
    最近更新 更多