[#5219] ruby for perl users — Noritsugu Nakamura <nnakamur@...>

35 messages 1997/11/09
[#5220] Re: ruby for perl users — tateishi@... (Tateishi Takaaki) 1997/11/09

立石です。

[#5224] Re: ruby for perl users — shugo@... (Shugo Maeda) 1997/11/09

前田です。

[#5243] read from subprocess — Kikutani Makoto <kikutani@...>

きくたにです。

17 messages 1997/11/10
[#5250] Re: read from subprocess — matz@... (Yukihiro Matsumoto) 1997/11/11

まつもと ゆきひろです

[#5300] Win32用の Rubyでの tkの使用 — Tomoaki Takebayashi <tota@...>

はじめまして、竹林といいます。

14 messages 1997/11/15
[#5302] Re: Win32用の Rubyでの tkの使用 — WATANABE Hirofumi <eban@...> 1997/11/15

わたなべです.

[#5303] Re: Win32 用の Rubyでの tkの使用 — Tomoaki Takebayashi <tota@...> 1997/11/15

[#5305] Re: Win32 用の Ruby での tk の使用 — aito@...5sun.yz.yamagata-u.ac.jp 1997/11/17

あ伊藤です.

[#5320] ruby 1.0-971118 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

20 messages 1997/11/18
[#5337] Re: ruby 1.0-971118 released — WATANABE Hirofumi <watanabe@...> 1997/11/19

わたなべです.

[#5340] Re: ruby 1.0-971118 released — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#5398] 配列への追加について — a-nisida@... (西田明良)

はじめまして、西田@初心者 と申します。m(..)m

16 messages 1997/11/22

[ruby-list:5318] when should I call Tk mainloop? (Re: Win32 用の Ruby での tk の使用 )

From: Kikutani Makoto <kikutani@...>
Date: 1997-11-18 03:13:54 UTC
List: ruby-list #5318
きくたにです。

Mon, Nov 17, 1997 at 09:04:00AM +0900 において
aito@ei5sun.yz.yamagata-u.ac.jp さん曰く:

> > なんか質問する個所が違うので、恐縮なんですがひとつ教えてください。
> > tkって、本家Tcl/tk、Ptyhon/tk、Perl/tkなどの実装を知ってますが、簡単に
> > 追加ライブラリとして組み込むことができるものなんでしょうか。
> > コードを見たことがないので、結構不思議なんです。
>
> tk 単独ではリンクできません.tcl/tk をそのままリンクします.

あまりrubyねたじゃないのですが、tcl/tkに詳しい人が多そうなので
便乗質問なのです。

昔から言ってるVerilogシミュレータから呼べる波形ビューワですが、
重弘さんのがrubyに標準実装されるまではと、今はPythonでやってます。

# Pythonは疲れるから、はよrubyに戻りたい

    (親プロセス)              (子プロセス)
Verilog PLI(C program) <->  Pythonスクリプト

という関係で、信号の追加や変化は親プロセスから、双方向stdio介して、
ストリングで送られてきます。

シミュレーションを途中で停めて途中結果を見たり、信号の追加
したりするので、子プロセスは下のようなループをしてます
(Pythonで勘弁^^)。
-------------------------------------------------------------
while 1:
    type, str = ipc_receive(fd)
    if type == FINISH:   # シミュレーション終了
	break
    elif type == START:  # # シミュレーション開始(今は何もしない)
	pass
    elif type == STOP:   # シミュレーション中断
	tr.tune_xaxis()  # スクロールエリアとか再設定
	root.update()    # 画面のアップデート
	# thread.start_new_thread (root.mainloop, ())
	while 1:  # シミュレーション続行指令が来るまで待つ
	    type, str = ipc_receive(fd)
	    if type == CONT:
		break
        # thread.exit_thread()
    elif type == ADDSIGNAL:    # 信号の追加
	w = Wave(str) # 一つの信号用にCanvas作成
	waves[str] = w    # 連想配列に信号名でCanvasを登録
	tr.addWave(str, w, 0, wav_ypos)  # Canvasを親Canvasに追加
	wav_ypos = wav_ypos + wavheight
    elif type == SIGVALUES:    # 信号の変化
	l = string.split(str)
	nam = l[0]
	t = l[1]
	b = l[2]
	waves[nam].plot_bit(t, b)  # 線のプロット

root.mainloop()
-------------------------------------------------------------

問題は Tkのmainloop を呼ぶタイミングなのです。
データ全部受け取った後、mainloop を呼べれば簡単なんですが、
上の話のようにそうではないのです。

rubyのtkモジュール使用スクリプトでは必ず最後にTk.mainloopが来ますが、
Pythonでも root.mainloop() なんてのが最後に来ます。

これだと、シミュレーション中断中は、(上でいう)root.update() で
tkの窓は出て波形も見えるんですが、スクロールなど、いっさい窓の
操作ができないんですね。

そこで、最後に root.mainloop() を呼ぶのではなく、
中断中だけ、スレッドでroot.mainloop()を動かそうとしたり
して、上のコメントになってるようなこともしてみましたが、
やはりうまくいかないようです。

そもそも私のしたいことは ruby+tk や Python+tk ではできないのでしょうか?
Cにtcl/tkをリンクしたほうがいいのでしょうか?

-- 
人生を背負い投げ

菊谷 誠(Kikutani Makoto)  kikutani@eis.or.jp kikutani@jdc.ericsson.se
hgf03701@niftyserve.or.jp    http://www.eis.or.jp/muse/kikutani/

In This Thread