2012-04-12 25 views
2

所以我想寫一個既使用big-bang(參見2htdp/universe)函數也使用對話框(請參閱racket/gui/base)的程序。我的問題是,我需要它,以便程序同時顯示兩個窗口在同一時間,但我很難弄清楚這一部分,因爲這兩個函數必須「關閉/完成」的代碼才能繼續。這是我已經盡力了,沒有運氣(原因是什麼之前說的):Big-Bang和對話框應用程序(球拍/方案)

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

有了這個樣本[模板]代碼,大爆炸應用表明第一,並在該對話框顯示,你必須關閉大爆炸應用程序。要重新迭代,我希望能夠同時顯示它們兩個。

如果您想了解更多關於該問題的信息,請告訴我。預先感謝您的幫助。

回答

4

您可以在單獨的線程自己eventspaces,這應該讓他們從相互阻塞的執行運行這兩個。你認爲這兩者之間會有溝通嗎?

下面是一個例子:

#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) 
+0

有道理。我不太確定我是否會讓他們直接溝通或不溝通,但這很可能。如果是這種情況,使用這種方法會有什麼問題嗎? – 2012-04-12 04:12:32

+1

我不得不承認,我還不確定如何讓大爆炸的宇宙節目與球拍/ gui程序進行對話:它們的預期用途是作爲初學者友好的簡單獨立應用程序。如果你需要更多的實質性內容,保持在球拍/ gui程序中似乎更加靈活。你可以在球拍/ gui中獲得與世界一樣的東西。請參閱:http://stackoverflow.com/questions/8402218/how-to-make-a-gui-using-lisp-drscheme-or-common-lisp/8468211#8468211爲例。 – dyoo 2012-04-12 17:30:47

+0

好的。這是我第一次搞亂'racket/gui',所以我只是因爲使用過它而使用了big-bang。如果我可以達到相同的目標(能夠繪製情節(用'plot')和線條/其他形狀),只用球拍/ gui程序,那麼我一定會用它們來代替。 – 2012-04-12 19:08:25