●●●●TCL/TKなら俺に聞け 2●●●●at TECH
●●●●TCL/TKなら俺に聞け 2●●●● - 暇つぶし2ch262:デフォルトの名無しさん
08/05/29 20:12:22
Tcl/Tk 8.5でBLT-2.4z使えてる方はいらっしゃいますか?

パッチとか修正とか、かなり手を入れないと使えないのでしょうか。

263:デフォルトの名無しさん
08/06/02 21:39:25
>>239
ここにその議論がある。URLリンク(wiki.tcl.tk)
要するにsplitすればよい。ただし連続する空白文字に対する動作が意図と異なるかもしれない。
while {[gets $ch line] >= 0} {
puts [lindex [split $line] 0]
}

あるいは、
puts [join [split $line] |]
などに書き換えて様子を見よう。

>>262
Windows版の場合、tcl84.dllに直接リンクしてしまってるからどうにもならないよね。
Tcl8.3あたり以降のextension作成のガイドラインから外れた古い作りになっているんだろう。
実際何年も更新されてないようだし。
自前ビルドしてやるしか。

264:262
08/06/03 11:42:06
>>263
URLリンク(jos.decoster.googlepages.com)
を基に試してみました。

demosやexamplesの一部 (多く?) が失敗するけど、なんとなく使えそうです。
BLT-3.0で対応するのかなぁ。

265:デフォルトの名無しさん
08/06/14 18:22:11
URLリンク(reddog.s35.xrea.com)
これは試した?

266:262
08/06/16 16:43:53
後出しでごめんなさい。Linuxです。
Fedora 9で試してまして、そうこうしてるうちに、>>263の方法で対応したパッケージがリリースされました。

URLリンク(bugzilla.redhat.com)
で対処してくださったようです。

267:デフォルトの名無しさん
08/06/20 19:54:08
tk でコンボボックスの幅を指定するにはどうすればいいでしょうか?
また、できれば選択した文字列が表示されるテキストボックス部分を
複数行表示にしたいのですが、可能でしょうか?

268:デフォルトの名無しさん
08/06/20 21:03:00
>>tk でコンボボックス
tile拡張のttk::comboboxのやつか?
ttk::combobox .cb -width 100 とかでいけんじゃね
>>複数行表示にしたいのですが、可能でしょうか?
不可能じゃね

269:デフォルトの名無しさん
08/06/27 03:20:15
質問があります。

set a hoge
set b a
set c b

とやって、cからたどってhogeに辿り着くには
どうすればいいのでしょうか。
$$$c とか $[$[$c]] とかいろいろやってみたのですが
できません……。

270:デフォルトの名無しさん
08/06/27 22:53:22
set a hoge
set b a
set c b

proc aho foo {
upvar $foo bar
return $var
}

puts [aho [aho $c]]


271:デフォルトの名無しさん
08/06/27 23:22:33
>>269
puts [set [set $c]]
>>267
2行は無理。BWidgetsのコンボを改造すればできるかも


272:デフォルトの名無しさん
08/06/28 00:44:17
>>271
へ~、setって変数の参照にも使えるんだ。 勉強になりますた。

273:デフォルトの名無しさん
08/06/28 03:31:47
>>263
> ただし連続する空白文字に対する動作が意図と異なるかもしれない。

この制約がどうにも辛いです。
連続した空白があってもそれをただ一つの区切りとみなしつつ、
安全にファイルなどから読み込んだ文字列を処理するには
どうしたらいいのだろうか。

274:269
08/06/28 04:50:38
>>270
>>271
ありがとうございます。

275:デフォルトの名無しさん
08/06/28 06:01:58
>>273
そんなの教わったregsub使えよ
while {[gets $ch line] >= 0} {
puts [lindex [split $line [regsub -all -- {\s+} $line { }]] 0]
}

276:デフォルトの名無しさん
08/06/28 12:50:19
>>273
set line {He said "I am}
foreach word [string map {\" \\"} $line] {
puts $word
}

277:デフォルトの名無しさん
08/06/28 14:34:54
>>276
'{' inside string

278:デフォルトの名無しさん
08/06/28 17:20:38
文字列の中に"や{がある事を気にする必要がある時と
必要がない時の条件がよく分からん。。。
あと、ファイルから読み込んだ行を一律regsubしてしまって
常に構わないのかどうかも。。。

279:デフォルトの名無しさん
08/06/28 21:56:13
>>278
文字列をリストに自動変換してるところは気にしろ。文字列をforeachしたり
リスト系のコマンドに直接文字列を渡したりしてるところは注意だ。
>>276
set line "He said \"I am \{ a boy \}"
foreach word [string map {\" \\\" \{ \\\{ \} \\\}} $line] {
puts $word
}

280:デフォルトの名無しさん
08/06/28 23:10:12
> \} \\\}
これは必要? あってもなくても同じではないの?

281:本田
08/07/01 06:46:34
>Tcl/Tk 8.5.3 June 30, 2008
>Tcl/Tk 8.6a1 June 25, 2008
>Tcl/Tk 8.4.19 Apr 18, 2008
URLリンク(www.tcl.tk)

282:263
08/07/02 07:53:23
>>273
そもそもの話をしてもいいだろうか。
こんなコードは試しましたか?


set lines {He said "I am
a boy"}

set i 0
foreach l $lines {
puts $i:$l
incr i
}

Tclのlist「形式」は平易ながらバイナリデータまで扱える立派な「データ構造」なので、
まともに実装しようとすればTclが最初から持ってるパーサーを実装しなおすようなことになるよ。

平易ではあるがあまり(書いたソフトの)ユーザーには触ってもらいたくないデータ形式のような気がする。
コメントも使えないしね。自分自身で読み書き保存するためにはいいけど、
ユーザーに触らせるならJSONやYAMLなどのより一般的な形式がいいだろうね。
今ならtcllibのCVS HEADにライブラリが置かれてるよ。

283:239
08/07/02 09:03:58
なんか、今頃また盛り上がってるが・・・

>>282
それじゃ根本的に違うんだよね~
getsで一行ごとにテキストファイルから読んでるの文字列に「"」があるのがミソなんで

set lines {He said "I am}

を処理することになるんですよ。


284:デフォルトの名無しさん
08/07/02 19:51:00
8.5から文字列をリストに変換できるかどうかチェックする
string is list $strが追加されてんぞ。

285:デフォルトの名無しさん
08/07/03 00:00:27
info completeで失敗したら、さらに1行読み込んでappendすりゃいいだけだろ
そもそもデータ自体が1行ずつ処理されるように書かれていないのになぜ、1行ずつ
処理したがるのか

286:デフォルトの名無しさん
08/07/03 01:29:08
ファイルの文書が、必ずしも""の対応関係があっている保障はないわけだが。

287:デフォルトの名無しさん
08/07/03 01:43:11
たしかにそういうこともあるな
flex/bisonでやるか PureTclでやるならfickle/taccle


288:デフォルトの名無しさん
08/07/04 11:09:03
canvasにarcなどを1000個くらい書くと激重でどうしようもありません。
自分の描画ルーチンが重いのではなく、Tkがcanvasをリフレッシュするのが激重です。
描画したアイテムを選択して移動とかするつもりはなく、単に絵が表示されればいいのですが…
こんな場合は、image photoに直接力技で図形を書いていくしかないですかね。

289:デフォルトの名無しさん
08/07/05 12:36:31
Tkのキャンバスウィジェット並みの機能ってほかのGUIフレームワークにないですかね。
書いた絵をドラッグできるとかそういう系。

290:本田
08/07/06 13:21:30
>>289
Zinc Is Not Canvas!
URLリンク(www.tkzinc.org)

OpenGLが、速い環境が無いと、遅すぎてかなわん。

291:デフォルトの名無しさん
08/07/07 21:37:10
Zincもええが、tkpathの方がシンプルでとっつきやすいよ

292:デフォルトの名無しさん
08/07/08 00:37:16
tkpath使ったら早くなるかとおもったけど全然早くならなかった・・・


293:デフォルトの名無しさん
08/07/09 07:59:32
>>288
>>292

1000を超える描画単位(図形やウィジェットなど)をリアルタイムで取り扱うことはスクリプト言語系のツールキットでは想定されてないと思う。
素直にネイティブコードで動く言語で実装したほうが早いんじゃない? 描画結果のキャッシュでもしつつ。

294:デフォルトの名無しさん
08/07/09 20:18:40
いやまだ手はある。Tcl3DでOpenGLで直接描画すれば・・・!

295:デフォルトの名無しさん
08/07/09 22:18:26
マルチスレッド拡張使ってる人いる?

296:デフォルトの名無しさん
08/07/09 23:06:43
ときどき使う。

297:デフォルトの名無しさん
08/07/09 23:44:51
>>296
非同期で走っている複数のスレッドから進行状況や終了などをメインのスレッドで
受け取るにはどういう手段があるんでしょう? tsv でスレッド内で状況をセットして
メインでpollするというぐらいしか思いつかないのですが。 メインの方で
vwaitしてスレッドのほうからthread::sendなんて出来ませんよね? 


298:デフォルトの名無しさん
08/07/10 06:48:22
C++などで書いてるソフトにTclのインタプリタを組み込んでるやつはいないだろうか。
Tcl_Eval()でTclスクリプトを実行したときにそのスクリプトにエラーが含まれていると、
エラーメッセージはResultの中に入ってる。
これをResultの代わりにエラー出力に出したいんだが、その方法がよくわからない。
やり方があるようなら教えてもらえないだろうか。

299:297
08/07/10 06:54:59
あ、だめだ。 これ以前にExpectがthread-safeで無くてスレッドからは使えないとか。 
Expectを多用してるので諦めます。

URLリンク(community.activestate.com)

300:本田
08/07/10 07:54:03
stderr
URLリンク(wiki.tcl.tk)
stderr is one of the stdio output files opened
- applications and functions tend to use it for the output of error messages.

301:298
08/07/10 10:32:22
>>300
ご協力ありがとう。
読んでみたけどどうやらこれはTclインタプリタ側(Tclスクリプト側)から
外部コマンドを呼び出したときのstderrについて議論しているみたいで、この話とはちょっと違う。

Tcl_CreateInterp()でinterpを作った後、
Tcl_SetStdChannel(channel, TCL_STDOUT);
Tcl_SetStdChannel(channel, TCL_STDERR);
を呼び出すことでinterpが呼び出すputsコマンドによる標準出力、エラー出力をトラップできることは確認できている。

だがTcl_Eval()やその他のTcl変数を直接いじるAPIを呼び出したときの文法エラー、実行時エラーは出力されないみたいなんだ。
(で、Resultの中に入っている)
こいつを、他と同じようにトラップできればいいんだが……。

302:デフォルトの名無しさん
08/07/10 11:44:58
>>297
>>299
URLリンク(www.tcl.tk)

303:デフォルトの名無しさん
08/07/10 14:59:25
>>301
TCL_ERRORだったらResultを出力すればいいだけじゃね?

304:デフォルトの名無しさん
08/07/10 22:13:52
>>298
なんでそんなことそをする必要があるかもう少し詳しく書いた方がいいぞ。そうしないと、
>>303みたいにすりゃいいだろ思うんだが
if (Tcl_Eval(interp, script)!=TCL_OK) {
char str;int len;Tcl_Channel e=Tcl_GetStdChannel(TCL_STDERR);
str=Tcl_GetStringFromObj(Tcl_GetObjResult(interp), &len);
Tcl_Write(err,str,len);Tcl_Flush(interp,err);
}


305:304
08/07/10 22:23:39
あー、どうでもいいけど、Tcl_WriteObjつかうと、Tcl_GetObjResultから一発で済むわ。

306:本田
08/07/22 20:12:44
TkSTEP 0.3b3 (Tk 4.1)
NEXTSTEP(tm)-lookalike-wanabee-hack-kit for Tk
Alfredo K. Kojima
tkstep0.3b3.tar.gz
tkstep8.0.4-2.tar.gz

Alfredo Kojima
URLリンク(en.wikipedia.org)
Alfredo Kengi Kojima
URLリンク(si3.inf.ufrgs.br)

TkSTEPは、現在、開発がストップしてるけど、
windowmakerなど他の仕事で作者は有名なんだな。

307:本田
08/07/23 01:18:22
The Tcl IRCd
URLリンク(www.hping.org)
The Tcl IRCd is an IRC server written in the Tcl language.
The current version is not a complete implementation of the IRC protocol
but should interoperate well with most IRC clients, and allows to register,
change nick, create channels, talk on a public channel or in query and so on.
The program is small,
less than 500 lines of code, and was written in order to be very simple to modify/extend.

308:デフォルトの名無しさん
08/07/24 04:12:37
string hoge とかって具合に 任意の string * コマンド(?)を追加したりはできないでしょうか。

309:デフォルトの名無しさん
08/07/24 20:37:58
proc stringHello {} {puts "HELLO WORLD"}

set map [namespace ensemble configure string -map]
dict append map hello stringHello
namespace ensemble configure string -map $map

string hello


ただし8.5以上。

8.4のときはstringコマンドをtcl_stringなんかに名前を変えて
そのうえでそれのラッパーのstringを作ったりしてた。

310:デフォルトの名無しさん
08/07/24 23:57:42
>>269
>$$$c とか $[$[$c]] とか…
puts [subst $[subst $[subst $c]]]

遅レスだが…

311:デフォルトの名無しさん
08/07/27 18:35:14
>>269 & >>310
$$var (間接指定)について
URLリンク(psg.com)
に丁寧な説明がある。
古い我家頁だが、今でもアクセス可能と思う。



312:デフォルトの名無しさん
08/07/29 00:59:08
BrowseX for Windows使ってた人いない?
いきなり消滅してて悲しい・・・

313:デフォルトの名無しさん
08/08/02 08:48:51
Active Tcl やっと8.5.3になった

314:デフォルトの名無しさん
08/08/05 04:33:00
tclコードをソース隠ぺいのため、バイナリ化または、
暗号化したいがどうすればよいでしょうか?

315:デフォルトの名無しさん
08/08/05 21:26:28
バイナリ化(exe化)ならここに色々ある。
URLリンク(home.netyou.jp)
隠ぺいのためになるかは不明.


316:デフォルトの名無しさん
08/08/11 10:37:56
comポートとかソケットをopenで開いてgetsした時、
相手が何も返してこないと、一生待ちつづけてしまうのですが、
タイムアウトさせたりする方法は無いですか?

317:デフォルトの名無しさん
08/08/12 07:07:15
>>316
Tcllibは調べた?

318:デフォルトの名無しさん
08/08/12 08:05:26
>>316
fconfigure -blocking
fileeventで非同期に処理するのが良いと思う


319:デフォルトの名無しさん
08/08/13 20:58:56
>>316この手のシークエンスを記述するためにafter ms命令が用意されている

320:316
08/08/14 09:50:55
>>318
fileeventがまさに探していた機能です
サンクスコ

>>319
それは考えたけど、一度発行したgetsを取り消す術がないからダメポ

321:デフォルトの名無しさん
08/08/24 00:56:41
foreach {o i } [regexp -all -inline {<item>(.*?)</item>} $read] {
のlsearchとかlreplaceとかで、ネストタグの抽出が簡単にできるのが良い。
perlより全然良い。日本語が問題なく使えるのが良い。簡単GUIも良い。
foreachの中のregexpが速ければもっと良い。なかなか最適化ができない。





322:デフォルトの名無しさん
08/08/24 01:10:16
tclの正規表現は早いほうって聞いたけどなあ・・・

323:デフォルトの名無しさん
08/08/24 02:59:06
Tclで書いたスクリプト自体はそれほど早く動作しないよね。
TclはJITに対応してるという記述がちらほら(wiki.tcl.tk含む)で見かけたので
ソースコードを調べたら、スクリプトを内部表現に書き換えるコンパイラはあっても
CPUのニーモニックに直接変換してる実装部分は見当たらなかった。

インタプリタ自体がやってることはそれほど複雑ではないので(ほとんどがコマンド自体の実装)
誰か実装してくれればいいなとは思うが、
googleのannualのフォーラムでの議題には特にあがっていないようだ。

324:デフォルトの名無しさん
08/08/24 09:13:12
速くしたけりゃその部分だけCで書け
そもそも
コマンド 引数 引数 ...
しかなくて、構文などというものもない簡易言語に期待しすぎでしょ。


325:デフォルトの名無しさん
08/08/24 22:12:31
その理屈で言うと括弧しかなくて構文などというもののない簡易言語にも期待できないのか。
それはさておきTclでバイトコードコンパイルしてるってのだけで驚異的じゃない?
Tclって意味論的には素直に考えるとevalに満ち溢れたような代物でしょ。

326:デフォルトの名無しさん
08/08/25 00:18:54
インタプリタ作ったり、DLLやsoを簡単にロードできたり、Cとの融合が十分考慮されてる言語なんだから、
処理速度を要求される部分はCで作った方がいいでしょ、マジで。

327:デフォルトの名無しさん
08/08/25 01:11:39
別にそこには反論してないよ。
それはTclのシンタクスとは直接の関係はないし、Tclが簡易言語とも思わないけど。

328:デフォルトの名無しさん
08/08/26 00:03:21
stdinを1文字単位で扱いたいのですが・・可能ですか?
Enter押すまで入力待ちになってしまいます。
機種依存が必要であればlinuxでお願いします。
proc getch {} {
return [read stdin -nonewline]
}
目的は簡易lessコマンド作成です。

329:デフォルトの名無しさん
08/08/26 00:10:49
>>327
tclはねぇ、ローカルスコープ切れないからちょっとプロシージャが長くなると変数がゴッチャになるのよ。
長いもの書くには向かないと思うがね。

330:デフォルトの名無しさん
08/08/26 00:44:05
zero3 [es]でeTcl使ってるんだけど・・・バージョン進むにつれてサイズでかくなりすぎ。
最新版はついに起動できなくなったwww
動的に拡張を読み込めるのがTclの利点なのに、一つの実行形式に使わない拡張までまとめないで欲しい・・・

331:デフォルトの名無しさん
08/08/26 01:37:04
>>329
Tclなめんな!

proc block {body} {
    eval $body
}

set x 100
set y 1000
block {
    set x 200
    upvar y y
    puts "value is $x $y"; # value is 200 1000
}
puts "value is $x $y"; # value is 100 1000

332:デフォルトの名無しさん
08/08/26 01:41:54
>>328
URLリンク(wiki.tcl.tk)
まあこれを読め

URLリンク(tcllib.sourceforge.net)
そして次はこれだ

333:デフォルトの名無しさん
08/08/26 03:33:43
>>332
ありがとうございます。
解決しました!

334:デフォルトの名無しさん
08/08/26 17:03:54
>>331
blockがたくさんネストしたらどこまでupvarしたらいいかわかんなくなっちゃうね。

335:デフォルトの名無しさん
08/09/08 13:49:03
日本語に関して質問です。
encoding systemがwindowsではcp932, Linuxではutf-8となっていて、
スクリプトを書くさいにそれぞれの文字コードで保存せねばなりません。
(string bytelengthはいずれの環境も一緒になるので内部ではutf-8のようですが)
ですので、windowsで作ったスクリプトをそのままLinuxに持っていくと文字化けしてしまい困っております。

encoding systemをcp932やutf-8に強制的にセットしたところで上手く動きません
(windowsでencoding system utf-8にし、スクリプトをutf-8で保存しても文字化け、等)

encoding systemの異なる環境間で同一スクリプトで動かす手立てはないものですかね。

336:デフォルトの名無しさん
08/09/08 20:35:03
Unicodeリテラルで書く。

337:デフォルトの名無しさん
08/09/10 03:14:41
>>335
もし8.5を使ってるんだったら、、sourceやtclshやwishに-encodingオプションが付いたから、
スクリプトはcp932で書いておいて、最初の3行を

#!/bin/sh
# the next line restarts using tclsh \
exec tclsh -encoding cp932 "$0" "$@"

にすることで、できたりしませんか?

逆に、スクリプトはutf-8で書いておいて、
windowsの関連付けの方で、wishに -encoding utf-8を付けるという手もあるかも。

試せないので、無責任に書きっぱなしですいません。


ところで、スクリプトをwindowsからLinuxへ持っていくときに
nkf通して変換というのじゃ駄目なんでしょうか。

338:デフォルトの名無しさん
08/09/10 07:12:11
>>335
shift-jisで書いておいて
#!/bin/sh
# \
LANG=ja_JP.SJIS; export LANG; # \
exec tclsh "$0" "$@"

で動くかもしれないし、動かないかもしれない。

339:335
08/09/10 10:06:33
>>336
よくわかりません。

>>337
8.4使っているのですいません。
(ActiveTclの拡張が8.5では少なすぎるので)
Linux側で修正したりwindows側で修正したりしたのを日付で同期してるのでnkfやiconvは使いにくいですね。

>>338
凄いぜ。
putsでターミナルに出力する文字は化ける(konsoleのモードがutfだからしかたない)が、
widgetに出力する文字はきちんと出たよ~。


340:デフォルトの名無しさん
08/09/10 20:07:26
>>339
puts \u0055\u0069\u0063\u006f\u0064\u0065\u30ea\u30c6\u30e9\u30eb\u304f\u3089\u3044\u3050\u3050\u308c

341:150.29.213.49 335
08/09/10 21:37:28
>>340
それはさすがに嫌杉でしょw

342:デフォルトの名無しさん
08/09/10 23:21:08
>>339
putsは fconfigure stdout -encoding utf8 とかで化けなくなると思う。
でも、そこまで文字コード意識するならWindows<->Linuxでコピーする時に変換するほうが良いんじゃないの?

最近ActiveTcl8.5.4に乗り換えたけど一見拡張が入っていないように見えて、実は Tcl\lib\teapot\package\ 以下に
入っているように思った。

343:デフォルトの名無しさん
08/09/11 21:48:49
>>341
この技はおぼえておけ。かならず役に立つときが来る。

344:デフォルトの名無しさん
08/09/12 22:20:20
>>339
>>342
ActiveTcl8.5.x のインストーラの最初の画面で、

8.5は8.4とほとんど互換性があるから、
teacupを使うか8.4に上書きインストールしたら
たくさんのパッケージが手に入る。

というようなことが書いてました。
まだ8.5に乗り換える気はないんで、それだけ見てキャンセルしたけど。

345:デフォルトの名無しさん
08/09/17 02:39:50
>>331
>>334
見つかるまでさかのぼるupvarを書いてみました。
upvarが上位の変数名とローカル変数名を並べて書くのに対し、
上位の変数名だけ並べて書いて同じ名前でリンクするようにしてます。

proc upvar2 {args} {
  set leveldepth [info level]
  foreach varname $args {
    for {set varlevel 2} {$varlevel <= $leveldepth} {incr varlevel} {
      if {[uplevel $varlevel info exists $varname]} {
        incr varlevel -1
        uplevel 1 upvar $varlevel $varname $varname
        break
      }
    }
  }
}


346:デフォルトの名無しさん
08/09/19 21:57:20
windows mobile でeTcl使ってプログラム作ってたらメモリが足りなくて死んだorz
image photoって、-paletteで色数制限しても内部はフルカラーメモリ展開するのね。
やっぱ、WMで使うには富豪過ぎるか、Tclはorz

347:デフォルトの名無しさん
08/10/16 04:52:51
内部イテレータ欲しい

348:デフォルトの名無しさん
08/10/27 13:15:30
Tclを久しぶりに書いてみたら、firefox用のpluginが正常にインストールできません。
どういう状況なのでしょうか?ご存知でしたら教えてください。



349:デフォルトの名無しさん
08/10/27 15:39:46
>>348
スネーク。状況をもう一度よく確認するんだ。

Tcl → バージョンが上がらない
Firefox → バージョンあがりまくり

放っておかれたアドオン(plugin)はどうなる?

350:デフォルトの名無しさん
08/10/28 07:20:41
>>348
了解

メインバージョンが上がらないと更新されない訳ですね。

351:デフォルトの名無しさん
08/10/31 16:09:38
300Kbyte程のTclTkを書いてみた。
っかZETってソフトのちょい変だけど。

URLリンク(carnageez.web.fc2.com)


352:デフォルトの名無しさん
08/10/31 22:10:52
10秒見ただけだが、名前空間使わずによくこんだけ書いたな

353:デフォルトの名無しさん
08/11/01 05:18:31
>>352
名前空間って何?( ゚д゚)ポカーン

354:デフォルトの名無しさん
08/11/01 05:45:22
>>353
URLリンク(www.tcl.tk)

355:デフォルトの名無しさん
08/11/01 07:09:06
>>354
ありがと。
へえーーなんちゃってオブジェクト化って感じなんだね。

356:デフォルトの名無しさん
08/11/01 09:51:35
Tcl 8.5からapplyコマンドでラムダ式とかが使えるらしいんだけど、
なんか入門的な情報ない?


357:デフォルトの名無しさん
08/11/01 16:24:05
set lis [another commend]
for e $lis { something $e }
とかやらずに、$lisに直接何かを作用して写像を得たり、
フィルタリングできるの?

358:デフォルトの名無しさん
08/11/01 22:49:17
初心者すぎてすいません。
tclのproc関数の出力をtkのテキストに書き出すにはどのようにすれば
いいのでしょうか?
いまいちtclとtkの連携方法がわからず困っています。


359:デフォルトの名無しさん
08/11/02 02:01:41
んと、こんなんやってる
set str "hogehoge"

f_text_update $str

proc f_text_update {win str}
if {![winfo exists $win]} {
text $win
grid $win -column 0 -row 0
}
$win delete 0.0 end
$win insert end $str
}

360:デフォルトの名無しさん
08/11/02 02:12:55
んもしや回答を誤ったか?

f_text_update [f_proc_func]

proc f_proc_func {} {
return "hogehoge"
}

これでどうだ

361:デフォルトの名無しさん
08/11/02 06:25:56
>>359-360
ありがとうございます。
試してみます!!

362:デフォルトの名無しさん
08/11/05 11:35:53
>>356
この記事は読んだ?
URLリンク(wiki.tcl.tk)

363:デフォルトの名無しさん
08/11/05 23:30:13
λx.λy.x(2)(3)
みたいなことをやろうとして、
apply {{x} {return [apply {{y} {return x}} 2]}} 3
てやっても
x
が返ってくる。
で、
apply {{x} {return [set [apply {{y} {return x}} 2]]}} 3
ってやれば3が帰ってくるが、setを使っている時点で2回目のapplyの戻り値が変数名であることを前提にしていて気持ち悪い。



364:デフォルトの名無しさん
08/11/08 14:38:54
ツール組込みのtcl環境でもlambda使いたい

365:デフォルトの名無しさん
08/11/10 23:01:54
>>363
こりゃーいったい何をやろうとしとんじゃ?return xで
文字列のxが返るのはあたりまえじゃないか

366:デフォルトの名無しさん
08/11/11 14:14:10
>>365
単に$のつけ忘れじゃ?


ついでに質問。
{}内の変数は置換されないよね?
そうすると、applyの引数にとる関数にはその引数で宣言した変数しか出てこれない。
これだと、例えば「xを引数にとって、『引数yをとって、yとxとの和を求める関数』を返す関数」とかが表現できない気がするんだけど…
""だとyが束縛されてないし…無理矢理置換するしかない?

367:デフォルトの名無しさん
08/11/11 20:25:25
答えると、Tclにはクロージャ無いねん。
だからxを置き換えるしかないんじゃないかなあ。

set func {x {return [list y [list expr $x + \$y]] }}
apply [apply $func 1] 2
3

こういうこと?

368:デフォルトの名無しさん
08/11/12 00:20:16
>>365
λx.λy..x
=λx.x
でしょ。
こうならないってこと。

369:デフォルトの名無しさん
08/11/12 08:27:21
>>368
> >>365
> λx.λy..x
> =λx.x
> でしょ。

そんなequalityを持つλ計算の体系は見たことが無い

370:デフォルトの名無しさん
08/11/14 22:42:02
結局なんだったんだ。もう

371:デフォルトの名無しさん
08/11/15 10:04:27
>>370
同感

372:デフォルトの名無しさん
08/11/15 10:11:42
点が余計に入った
λ.x.(λy.x)は変換するとλx.xだろうと。

373:デフォルトの名無しさん
08/11/15 18:14:51
>>372
お前が前提にしているλ計算の公理系を言え。
通常のβη変換ではλx.(λy.x) = λx.xは導出できない。

374:デフォルトの名無しさん
08/11/30 09:35:24
Tcl and the Tk Toolkit, Rough Cuts, 2nd Edition
* By John K. Ousterhout, Ken Jones
URLリンク(www.informit.com)

ついこの前プレンティスから出てる妙に読みにくいTcl本買った俺涙目

375:デフォルトの名無しさん
08/11/30 19:08:03
日本語で良書なTcl本ってなにがあるかな

376:デフォルトの名無しさん
08/12/01 20:34:12
ものすごいつまらんこと聞いていいっすか?

Tclって、pythonで言うところのinputとかraw_inputって無いの?

377:デフォルトの名無しさん
08/12/01 22:11:19
gets

378:デフォルトの名無しさん
08/12/02 09:18:28
>>376
pythonで言うところのinputって何をするものか書いたほうがアドバイスもらえると思うが?

379:376
08/12/02 20:46:30
>>378
それもそうですね。失礼しました。自分は職業プログラマではな
いのであんまりうまく説明できそうにないですが。。
webで見つけた説明によれば、

raw_input関数
標準入力から1行読み込んで(末尾の改行をのぞいたものを)文字列に変換して返す。

>>> s = raw_input()
test
>>> s
'test'

とこんな感じです。上記はインタプリタでの動作です。
呼ばれると、ユーザの入力を待つモードになります。
ユーザが文字列を入力すると変数に文字列が代入されます。
input関数は数値入力用です。

380:デフォルトの名無しさん
08/12/02 20:56:09
やっぱgetsでいいじゃん

tclsh>gets stdin s
test
tclsh>puts $s
test


381:379
08/12/02 23:32:57
>>380
レスありがとうございます。

getsにはそんな風に書くんですね。
channelIdってのが何を指してるのかサッパリでした。。

明日会社に行ってまた試してみます。
たまーに仕事用ツール作成でスクリプト書くんですが、
諸事情あって今回はTclにで書いていて。。

382:デフォルトの名無しさん
08/12/04 00:53:01
scan $str "%s,%s,%s,%s" a b c d
とかもあるよ。scanfみたいなの。
また正規表現を使った読み込みとか便利
set fp [open $fname]
gets $fp str
regexp {\[\s*\s*\]\s*(\w+)} $str d1 d2とかね

以下が改行取って読み込みとか
set fp [open $fname];gets $fp str
foreach i [split $str "\n"] {

}
以下とかするとバイナリファイルも開けるよ
set fp [open $fname]
fconfigure $fp -translation binary
binary scan [read $fp 1000] H* str


383:デフォルトの名無しさん
08/12/04 22:00:38
binary scanとbinary formatの使い方をすぐ忘れちゃうのは秘密だ

384:デフォルトの名無しさん
08/12/04 22:04:45
>>375
Tcl/Tkデスクトップリファレンスには超おせわになった。
あとEffective Tcl/Tk。この2冊はTcl/Tk修行時代の
10年位前にかなり読んだ。

385:デフォルトの名無しさん
08/12/10 21:58:58
Tcl初心者です。すみません、教えて下さい。

ビルトインコマンドにラッパーをかける事は
できるのでしょうか。

例えば

proc wrapper {cmd} {
catch {eval {$cmd}} status
puts "$cmd , $status"
}
:
alias expr {wrapper expr}
:
expr {1+1} ;# wrapper {expr {1+1}} -> expr {1+1} ,0

的な感じです。

386:デフォルトの名無しさん
08/12/11 22:04:10
>>385
これじゃ無限ループになるだろ。exprはrenameして新たにラッパーのexprを定義すれば?

387:デフォルトの名無しさん
08/12/17 17:04:55
>312
>BrowseX for Windows使ってた人いない?

Hv3というtkhtmlベースのブラウザならある。
URLリンク(tkhtml.tcl.tk)

388:デフォルトの名無しさん
08/12/19 21:06:51
Dr. OusterhoutがTclコアチームから抜ける。
URLリンク(groups.google.com)

389:デフォルトの名無しさん
08/12/22 21:53:03
プログラムから逃げてきたのに卒論で無理やりやらされてる
Cで作ったexeファイルをtcl/tkで作ったGUI上で実行したりできるの?

ていうかこんなことも分からない感じで死にそう・・・

390:デフォルトの名無しさん
08/12/22 23:27:50
>>388
そしてその翌日itclのコア組み込みが決定したのであった・・・!

>>389
CでCUIのexe作って、Tcl/Tkでガワ作って、パイプで接続とか。
まあどんなことがやりたいかによる。CでDLL作って、それをTcl/Tk
から使うほうが楽かもしれない。

391:デフォルトの名無しさん
08/12/23 00:07:48
>>389
unixだと楽だが、windowsだと面倒。

392:デフォルトの名無しさん
08/12/23 11:28:21
え、incr Tcl?
正直オブジェクト指向を入れるなら参照とガベコレの概念を入れる前提で
デザインしなおしたほうがいいのに・・・
(逆に言うとこの2つを入れればオブジェクト指向はこれまでどおり拡張でいいし)
オブジェクト手動開放とか今日日ありえないっすよ。

393:デフォルトの名無しさん
08/12/23 11:40:20
>>391
んなこたーない。
execで実行するだけ。
so, dllも同じソースで簡単に作れるし(windowsはmingwのgcc使ってるけど)

394:デフォルトの名無しさん
08/12/23 19:53:07
いやwindowsは苦労するよ。
pathや引数周りに落とし穴がいっぱいある。

MSが早くcygnusを買収してくれればいいのに。

395:デフォルトの名無しさん
08/12/23 20:02:39
>>394
落とし穴ってなに

396:デフォルトの名無しさん
08/12/23 23:13:52
path周りの避け方はマニュアルに書いてあるだろ。
で、なんでcygnusが出てくるんだ?
もはやTclはcygwinをサポートしてないぞ。
素直にActive TclをインストールしてCはMinGW使えばいい。

397:デフォルトの名無しさん
08/12/23 23:38:12
8.6b1きたあああああ!!!
try ~ throwきたあああ!!!
zlibきたあああ!!!
ttk::spinboxきたあああ!!!
tk fontchooserきたああああ!!!
Canvasの回転文字きたああああ!!!
ttkのvistaテーマきたあああ!!!

398:デフォルトの名無しさん
09/01/06 12:23:24
今M1だが、修論でtcl使うはめになってubuntuの起動から勉強してるところなんだけど、
tclでパラレルポートからの入力って使える?
その辺含んだお勧めの書籍なんかあれば知りたい。

399:デフォルトの名無しさん
09/01/06 21:25:39
URLリンク(wiki.tcl.tk)
まずは適当に検索してみればいいとおもうの。

400:本田
09/01/08 21:18:47
AC3Dマニュアル
URLリンク(panda.ecs.cst.nihon-u.ac.jp)
1998年11月6日更新 - AC3Dバージョン2以降に対応

AC3D
URLリンク(mail2.nara-edu.ac.jp)
>3 次元模型 (モデル) を作るためのソフトはモデラーと呼ばれています。
> AC3D はそのモデラーの一つで、随分人気があるようです。
> AC3D は今では商用ソフトになってしまいました。

Shareware Version.
URLリンク(locgate.smtn.stavropol.ru)
古いけどTcl/Tkスクリプト使用して参考になる。

最新版。
URLリンク(www.inivis.com)

401:本田
09/01/09 21:21:13
These are some sample files for the 3D modeller - AC3D
fURLリンク(ftp.uni-duisburg.de)

AC3D Manual(Updated 11th March 1999 - Covers AC3D Version 2 onwards)
fURLリンク(ftp.uni-duisburg.de)
fURLリンク(ftp.uni-duisburg.de)

AC3D Manual Ver. 3.4.1
fURLリンク(ftp.uni-duisburg.de)

URLリンク(locgate.smtn.stavropol.ru)
に付属のGLU32.DLLとOPENGL32.DLLは、おそらくWindows95用でしょう。

Windows95以降に発売されたWindowsには、
GLU32.DLLとOPENGL32.DLLが付属してるとはずなので、
Windows95以降に発売されたWindowsをお使いの場合は、
AC3D v.2.0付属のGLU32.DLLとOPENGL32.DLLを削除したほうが、
AC3D v.2.0の安定性や速度が改善される可能性があります。

402:デフォルトの名無しさん
09/01/13 00:08:38
すみません質問させて下さい。
以下のコードのように、プロシージャfooを作っておいて
複数のボタンをpackする作業をまとめたいと考えています。

proc foo {w msg} {
pack [button $w.$msg -text $msg -command {puts $msg}]
}

pack [frame .f]
foo .f "b1"
foo .f "b2"

ところがボタンを押してcommandを実行させると、
以下のエラーが出ます。
Error: can't read "msg": no such variable

ボタンを押したときにローカル変数msgを参照できていないということだと
思いますが、何か良い解決策はありませんか?
よろしくお願いします。

403:402
09/01/13 00:10:15
使用環境を書き忘れました。
WindowsXPでActiveTcl8.5.4.0.286921-win32-ix86-threaded.exe
をインストールして使っています。

404:デフォルトの名無しさん
09/01/13 00:30:21
-command "puts $msg"

405:402
09/01/13 00:56:06
>>404
できました!
"と{との違いを調べてきます。
早速の回答ありがとうございます。

406:デフォルトの名無しさん
09/01/13 12:59:47
>>402
{}の違いがポイントではなく、-command で指定するコマンドが関数の外で実行されることがポイントなのです。
msg変数は関数fooのローカル変数なので、関数の外で実行されるボタンのコマンドからは参照できません。


407:デフォルトの名無しさん
09/01/13 21:28:04
>>404 ではないですが、もう少し補足しておきます
set msg AAA; pack [button .b -text PushMe -command "puts $msg"]
としておいて、ボタン.bを押すと当然、AAAとコンソールに表示されます。
続けて、set msg BBBとしてボタン.bを押してみて下さい。
コンソールにAAAと表示されますね?
これはどういうことかというと、

408:402
09/01/14 19:29:14
補足説明ありがとうございます!

>>407
ボタン.bを生成する時点で変数msgを"puts AAA"という文字列に
展開していたため、ですよね?

button配置は""で解決できましたが
今度は-textvarを使うウィジェット生成をまとめようとして壁にぶつかりました。
>>406, >>407のことから色々考えてevalを使ったら自己解決できました。

pack [entry .e1 -textvar a1] ;# ←この文をすっきりさせたい
pack [entry .e2 -textvar a2] ;# ←この文をすっきりさせたい

proc foo {w var} { pack [eval entry $w -textvar $var] }
foo .e3 a3 ; foo .e4 a4

でも、C言語やPerlをよく使っている身としては、
ポインタを渡せれば良いのになあと、何だかもぞもぞした気分になりました。

409:デフォルトの名無しさん
09/01/14 20:59:03
何をしたいかわかってないが、たぶんそのevalは不要

410:402
09/01/14 21:08:00
あら本当だ。。
「-textvar 変数名を表す文字列」だから
ウィジェット生成時にvarを文字列に展開してOKということでしょうか。
落ち着け>オレ

411:本田
09/01/14 22:13:21
>>408
> でも、C言語やPerlをよく使っている身としては、
> ポインタを渡せれば良いのになあと、何だかもぞもぞした気分になりました。

C言語知ってるんなら、Tclのソースコードを読んだらいいのに、
Tcl8.0位がコンパクトで読みやすいし古すぎない。

412:402
09/01/15 01:47:16
>>411
うーん。。多分自分のC言語の実力程度ではソースを読んでも理解できなさそうな予感がします。
あと正直なところ、自分としてはあまりtcl/tkは好きになれず、あまり深入りしたくありません。。
(今はやむを得ぬ事情があって触っています。せめてperl/tkが使えれば良かったかもと思います)

tcl/tkならではの魅力があるのは分かるんですが(簡単にGUIを使えて複数のOSで動かせるとか)、
他の言語なら当たり前のようにできる記述方法ができなかったりすることが多いので
結構ストレスがたまってしまいます。
たとえば行末のコメントは、「# コメント」では駄目で「;# コメント」ならOKとか、
理由は分かっても不自由さがぬぐえません。

自分にもっと実力があればラッパーかプリプロセッサを自作したくなるだろうと思います。
上のコメントの例なら、ごく単純には sed 's/\/\//;#/g' すればストレスが減るかもしれません。

とか何とか愚痴をこぼしながらもtcl/tkの本を2冊買ってしまいました。
でも最新バージョンの便利そうなウィジェットの説明などはネットで調べた方が良さそうですね。

413:デフォルトの名無しさん
09/01/15 07:35:43
Tcl/Tkの本がまだ2冊もあったか。

414:デフォルトの名無しさん
09/01/15 10:27:13
CとリンクしやすいのでTclはメインにしてもよし、サブで使ってもよし。
文字列処理がやりやすいのでファイル入出力とGUIはTcl/Tk、その他はCとかでもいいし。


415:本田
09/01/21 19:06:18
Ayam is a free 3D modelling environment for the RenderMan interface, distributed under the BSD licence.
URLリンク(ayam.sourceforge.net)
Ayam features at a glance:
* RIB (RenderMan Interface Bytestream) export and import.
* Support for NURBS curves and (trimmed) NURBS surfaces, Boxes, Quadrics (Sphere, Disk, Cylinder, Cone, Hyperboloid, Paraboloid, and Torus), CSG, MetaBalls, Patch Meshes, Polygonal Meshes, and Subdivision Surfaces.
* NURBS modelling includes approximating and interpolating curves as well as extrude, revolve, sweep, birail, skin and gordon objects with caps, holes, and bevels.
* Custom objects that may freely implement their representations (using OpenGL and RIB) and even small GUIs to edit their type specific parameters may be written by the user and dynamically loaded at runtime.
* Scripting interface: Tcl.
* Misc: instancing, arbitrary number of modeling views, object clipboard, independent property clipboard, console, n-level undo.
* File formats (r/w): RIB, DXF, 3DM, 3DMF, OBJ, X3D.

AC3Dは、ポリゴンモデラーだけど、Ayamは、NURBSもサポートしてます。

416:デフォルトの名無しさん
09/01/22 19:17:56
Python/Tkでソースの間違いを見つけられないのですが、
探してもらってもいいですか?

417:デフォルトの名無しさん
09/01/23 01:44:36
TCL/TKなら俺に聞け
Python/Tkなら他所で聞け

418:デフォルトの名無しさん
09/01/24 01:56:00
>>417
座ぶとん10枚! ̄ー ̄)ノ~■

419:本田
09/02/01 08:39:59
BRL-CAD
URLリンク(brlcad.org)
URLリンク(brlcad.org)
URLリンク(brlcad.org)
BRL-CAD's integration with TclTk
URLリンク(brlcad.org)
BRL-CAD スクリーンショット
URLリンク(www.cadcamcube.jp)

420:本田
09/02/09 18:37:46
>>419
ArcherとMGEDの2つのUIがあります。
Archerは、GUIを使います。
MGEDは、CUIで、
puts {Hello,World!}と入力すると、
Hello,World!とエコーします。

421:本田
09/02/09 19:35:59
いま、欧米で一躍注目を集めているアプライアンス化された高速オブジェクトストレージ製品が、Panasasです。
公的研究機関におけるHPC分野から、企業のハイパフォーマンスのシミュレーション分野まで、
次々と導入が進んでいます。

本セミナーでは、Panasas社の開発責任者であるBrent Welch氏に来日いただき、
海外の研究機関での利用例や、最先端の導入成果と製品アーキテクチャについて語っていただきます。
ぜひこの機会に、今世界から注目を集める革新的なストレージソリューションの全貌を、
実機デモもご覧いただきながら実感ください。

ご多忙の折とは存じますが、皆さまのご参加を心よりお待ち申し上げます。
URLリンク(spider.ctc-g.co.jp)

HP2C製品 - Panasas ActiveStorストレージクラスタ
URLリンク(www.hp2c.biz)
URLリンク(www.hp2c.biz)

URLリンク(www.panasas.com)

422:本田
09/02/09 19:54:12
>>421
POSIX IO extensions for HPC
Brent Welch, Panasas, [welch@panasas.com]
URLリンク(www.usenix.org)
POSIX I/O High Performance. Computing Extensions. Brent Welch (Speaker). Panasas.
URLリンク(www.usenix.org)

423:本田
09/02/11 20:59:15
>>422
POSIX IO
pNFS
OSDv2
Brent Welch, Panasas Inc.
HECIWG-FSIO 2007
URLリンク(institutes.lanl.gov)

Managing Scalability in Object Storage Systems for HPC Linux Clusters
Brent Welch
Panasas, Inc
6520 Kaiser Drive
Fremont, CA 94555
Tel: 1-510-608-7770
e-mail: welch@panasas.com
Garth Gibson
Panasas, Inc
1501 Reedsdale Street, Suite 400
Pittsburgh, PA 15233
Tel: 1-412-323-6409
e-mail: garth@panasas.com
URLリンク(storageconference.org)

424:本田
09/02/13 18:42:01
Index of /tcl/ftparchive
fURLリンク(ftp.uni-hannover.de)
>[DIR] Parent Directory 29-Jan-99 12:30 -
>[DIR] FAQ/ 29-Jan-99 12:22 -
>[DIR] NEW/ 17-Apr-00 13:53 -
>[TXT] README.html 11-May-97 16:31 1k
>[DIR] TclX/ 06-Feb-00 18:58 -
>[DIR] alcatel/ 10-Sep-99 17:19 -
>[CMP] all.files.list.gz 12-Jan-00 00:00 74k
>[DIR] binaries/ 29-Jan-99 12:22 -
>[DIR] incoming/ 24-Feb-01 00:36 -
>[DIR] markd/ 29-Jan-99 12:21 -
>[DIR] mirror/ 29-Jan-99 12:21 -
>[DIR] neoscript/ 05-Aug-99 15:54 -
>[DIR] neosoft/ 29-Jan-99 12:21 -
>[DIR] neowebscript-sa/ 29-Jan-99 12:27 -
>[DIR] neowebscript/ 05-Aug-99 15:54 -
>[DIR] old/ 29-Jan-99 12:19 -
>[DIR] sorted/ 19-Oct-99 19:33 -
>[DIR] stuff/ 29-Jan-99 12:19 -
>[DIR] tclx-distrib/ 06-Feb-00 18:58 -


425:デフォルトの名無しさん
09/02/18 19:28:30
ruby tkをはじめたばかりなんですがWin32で言うところのSetTimerは
どのように実現したらよいのでしょうか?



426:デフォルトの名無しさん
09/02/18 20:23:45
after

427:デフォルトの名無しさん
09/02/18 20:37:28
>>462
トン

428:デフォルトの名無しさん
09/02/24 20:57:52
おめでとう
Active Tcl/Tk ver.8.5.6 になった。


429:デフォルトの名無しさん
09/02/24 21:36:08
まだ8.5使ってんのか。俺はもう8.6に移行した

430:デフォルトの名無しさん
09/02/24 22:14:41
8.6は、まだ対応を謳ってない主要ライブラリがあるよ。tcllibとか。
もちろん、使うのは自由だが。

431:デフォルトの名無しさん
09/02/24 22:16:37
最近のTkはナウなヤングにバカウケな感じの見た目になった?

432:本田
09/02/25 00:28:20
>>431
プッ。

433:デフォルトの名無しさん
09/02/25 01:37:24
Tcl/Tkは時代遅れな気がしてPythonでもやるかと思ったが、
インスコしたらTcl/Tk一式入ってきたので、萎えた。
Tkが他のLLで使われる限りTcl/Tkは不滅だな、こりゃ。

434:本田
09/02/25 20:17:07
>>433
Tile: an improved themeing engine for Tk
URLリンク(tktable.sourceforge.net)

435:デフォルトの名無しさん
09/02/28 16:26:43
Tcl/TK で作られた端末エミュレータってありますか?
GUI上でシェル使いたいんですけど

イメージとしては GUI上に Textウィジェットみたいなものがおいてあって、
その中でシェルが使えるみたな感じです

436:デフォルトの名無しさん
09/02/28 16:42:09
echo '"abcde","fghi","jkl","mno"' | sed -e "s/\"//g" | awk 'BEGIN{FS=","}{print $3}'

これと同じことをTclではどのようにやれば良いのでしょうか?

また、echoコマンドのところが
cat ファイル名
だった場合についても教えて下さい。

437:デフォルトの名無しさん
09/02/28 17:29:42
set data {"abcde","fghi","jkl","mno"}
puts [string trim [lindex [split $data ,] 2] \"]


438:デフォルトの名無しさん
09/02/28 17:34:15
>>437
おぉ!素晴らしいです!
素早いレス、ありがとうございます。

439:437
09/02/28 17:49:51
set f [open "|cat ファイル名]
gets $f data
>>437
close $f

440:デフォルトの名無しさん
09/02/28 17:55:51
>>439
疑問が完全に解けました。
どうもありがとうございます。

Tclって素晴らしいですね。
しっかり勉強して使いこなせるようになりたいです。

441:本田
09/02/28 18:00:10
>>435
Tcl terminal with color support
URLリンク(sourceforge.net)

C言語も使ってるみたい。

442:デフォルトの名無しさん
09/02/28 18:04:52
>>440
Tclには組み込みで正規表現が使えるし、
そのフォーマットならtcllibでcsvのサポートもあるのでテストしてみるべき。

443:デフォルトの名無しさん
09/02/28 18:12:50
>>442
色々教えていただきまして、恐縮の極みです。
正規表現やtcllibについてしっかり勉強したいと思います。

444:439
09/02/28 18:25:55
勘違いしてました
catコマンドをつかっちゃだめなんですね
set f [open ファイル名]
foreach data [split [read $f] \n] {
 puts [string trim [lindex [split $data ,] 2] \"]
}
close $f

445:デフォルトの名無しさん
09/02/28 18:39:40
>>441
ありがとうございます。あるんですね端末エミュレータも。
スクリーンショット見る限りじゃ、カラーも使えてかなりよさげです。

端末エミュレータ部分をウィジェットとして自分のアプリ内で使えたりするんですかね?
ちょっと調べてみます。


446:デフォルトの名無しさん
09/03/18 22:12:00
保守

447:本田
09/04/07 00:25:21
Effective Tcl/Tk (ASCII Addison Wesley Programming Series) (単行本)
マーク ハリソン (著), マイケル マックレーン (著),
Mark Harrison (原著), Michael McLennan (原著),
吉川 邦夫 (翻訳)
# 単行本: 415ページ
# 出版社: アスキー (1999/07)
# ISBN-10: 4756131654
# ISBN-13: 978-4756131652
# 発売日: 1999/07
# 商品の寸法: 25.6 x 18 x 2.2 cm

この本出版社では在庫切れ。
大手の書店にはまだ流通在庫は在る。

アスキーは角川書店系列になって以来、
コンピューター関係の本の絶版が続出しているそうだ。

448:デフォルトの名無しさん
09/04/07 00:37:07
>>447
立ち読みで目を通してしまったので買わなかったけど、
そろそろ手に入らなくなっちゃうのか。買っておくかなぁ。

ちなみに Tcl&Tk ツールキット Ousterhout博士 の本は後生大事に抱えている。

449:デフォルトの名無しさん
09/04/09 01:00:54
一番世話になったのはTcl/Tkデスクトップリファレンス。
あれ超見やすい。

450:デフォルトの名無しさん
09/04/19 20:06:05
申し訳ないのですが質問です

5年ほど前にLinuxで使ってた時(Tcl/Tk,Expect共にVer覚えてません)は
send プロセス名 "set a 1"
とか子プロセスに命令してた気がするのですが
本日WinXPにてActiveTcl8.4.19.1を落として動かしてみたところ
sendに引数が2つ以上あると怒られてしまいます

きっと私が何か阿呆な勘違いをしているのでしょうが
「このURLを見やがれタコ」ってモノがありましたら御提示下さい

451:デフォルトの名無しさん
09/04/19 23:19:02
URLリンク(docs.activestate.com)
SECURITY のところに
Under Windows, send is currently disabled.
ってある

452:デフォルトの名無しさん
09/04/19 23:29:22
>>451
ズバリこれですね感謝です
ddeコマンドとやらで代用できるぽいのでちょっと試してみます

453:本田
09/04/26 19:36:30
The Tcl UDP extension provides a simple library to support UDP socket in Tcl.
URLリンク(sourceforge.net)

454:本田
09/04/29 00:21:55
>>452
dde
URLリンク(wiki.tcl.tk)
tcom
URLリンク(wiki.tcl.tk)
optcl
URLリンク(wiki.tcl.tk)

activex controlを使うにはtcomではなくoptclを使う。

455:デフォルトの名無しさん
09/04/29 22:24:57
Active Tcl/Tk ver.8.5.7 になった。


456:デフォルトの名無しさん
09/05/09 20:09:14
John Ousterhout博士インタビュー
URLリンク(www.computerworld.com.au)
「やっぱOO入れときゃよかったかもね」的発言も。

457:デフォルトの名無しさん
09/05/09 20:14:56
>>456
それはooを取り込もうとがんばってるCoreTeamの
活動を支援するリップサービスでは・・・

458:デフォルトの名無しさん
09/05/14 20:41:38
plplotをWindows上のTCL/TKで使いたいのですが、すぐに動くバイナリは無いものでしょうか?
探した限りは無いようですが…

459:デフォルトの名無しさん
09/05/15 09:09:34
ちょっと見てみたが、そもそもソースコードしか配布されて無いように見える。
素直に自分でビルドしてみたら?

460:デフォルトの名無しさん
09/05/15 21:19:57
>>459
やはりソースだけですか… LinuxだとRPMがあるみたいですが…
コンパイルとなると敷居が高そうなので、ちょっと他を探してみます
ありがとうございました。

461:デフォルトの名無しさん
09/05/15 22:39:19
URLリンク(dishaw.org)

462:デフォルトの名無しさん
09/05/16 09:24:34
>>461
ありがとうございます! 早速見てみます

463:デフォルトの名無しさん
09/06/08 20:51:13
ちょっと相談に乗ってくください
Windowsでdqkitを使ってexeにラッピングしてるのですが
set cmd "wish C:/tcl/main.exe/sub.tcl $args &"
eval exec $cmd
例えばですが ↑みたいな感じでsubプロセスを動かしたいのですが動かないんですよね

URLリンク(www.interq.or.jp)
> Starpackにラップした実行形式(.exe)は、execコマンドあるいはパイプで実行できない。

これに引っかかってるのかなーと思うのですが
別の書き方でどうにか出来ないでしょうか?
スレッドって使ったこと無いのですがスレッドで出来るのかな

464:デフォルトの名無しさん
09/06/08 22:12:18
Tclのexe化ツールは複数あるけど、基本的にはTcl側に仮想的なパスを見せ、
実際のファイルアクセスまでにそれを書き換えるという方法だからね。
外部プログラムを実行するのは最終的にシステムコールをとおしてTclの外に行っちゃうから、
システム(この場合はWindows)から見えているパスじゃないといけなくなるだろう。

で、さっきも言ったようにexe化ツールは複数あるから、共通の土台で話ができないよ。
exe化ツールのドキュメントやフォーラムの漁ってみるべし。

465:デフォルトの名無しさん
09/06/08 22:35:31
どもです
いくつか比較して今のdqkitが一番適してる感じだったのですが
他の方法も検討してみます

とりあえず現状で思いついた案としてはsub側も.exeにラッピングして
exeを2個体制で・・・スマートじゃないなぁ

466:デフォルトの名無しさん
09/06/08 22:41:14
一次情報に当たれと言ってるんだ。
自分の頭の中だけじゃ解決しない問題だろ。

467:デフォルトの名無しさん
09/06/09 19:18:33
ActiveStateのツールじゃだめなのかいな?

468:デフォルトの名無しさん
09/06/09 19:50:12
BLTと日本語を使いたいのでなるべくならdqkitが良かったんですよね
Freewrap日本語化版とかTclPro1.3じゃBLTを使うのが大層面倒っぽかったので。

ActiveStateのってTclDevKitでしょうか?
とりあえずBLT使えるか心配なのと仕事でも使いたいのでライセンスも心配ですが
ちょっと試してみます
ありがとうございました

469:デフォルトの名無しさん
09/06/10 00:50:29
wishをサブプロセスで動かすの前提なら別にexeにしなくてもいいんじゃないの?とか言ってみる

470:デフォルトの名無しさん
09/06/10 18:33:01
>>468
ちょっと話が変わって申し訳ないんだけど、BLTってまだメンテされてるんでしょうか?
自分も使おうかと思ってたんですけど、どっかでメンテされてないって読んだので、
躊躇している次第です。

471:本田
09/06/10 20:26:49
>>470
CVSはまだメンテナンスされてる様だ。
URLリンク(blt.cvs.sourceforge.net)

472:デフォルトの名無しさん
09/06/10 21:22:33
躊躇って何を躊躇すんの?使ったら何かを失うわけでもないのに

473:デフォルトの名無しさん
09/06/11 08:03:07
>>472
業務用のシステムなので、継続的なメンテナンスが見込めそうなのはやはり使いにくい
のですよ。

474:デフォルトの名無しさん
09/06/13 19:55:17
SolarisのCDEでwish使ってるんですが、
Tkのウィンドウだけマウスポインタが通過するだけで
最前面にraiseされてしまいます。
他のウィンドウは大丈夫なのに、なんでだろ。

CDEの設定では
『ポインタでウィンドウをアクティブにするけど、
ウィンドウ順は変えない』
としているので、Tk以外のウィンドウはクリックしない限り
raiseはされないんですが、Tkだけマウスが通っただけで
ウィンドウの前後関係が変わってしまいます。


475:デフォルトの名無しさん
09/06/14 11:09:44
->465
ご本家のTclkitのページ(URLリンク(www.equi4.com))に
 Don't expect exec and popen to work on files in VFS
と書いてあるので、execはイモ筋(dqkitでも多分ダメ)
やりたいことがよくわからないがdqkitはMT版があるので、
複数のプログラムを同時に別のスレッドで走らせる筈。


476:デフォルトの名無しさん
09/06/17 17:31:59
TclOOで自分が作ったクラスのサブクラスって、どうやって作るんでしょうか?

477:デフォルトの名無しさん
09/06/17 21:51:18
oo::class create mobile {
method bell {} {puts PURURURU}
}

oo::class create softbank {
superclass mobile
}

478:デフォルトの名無しさん
09/06/18 10:09:49
>>477
ありがとうございました。理解できました。
検索しても見つけられなかったので助かりました。


479:デフォルトの名無しさん
09/06/23 05:40:16
なんか最近tcllibがあわただしいと思ってたら、
GSoC 2009のプロジェクトでgraph操作の実装をやってるところだったのね。

URLリンク(wiki.tcl.tk)

480:デフォルトの名無しさん
09/06/23 12:51:03
印刷サポートもやるみたいね

481:デフォルトの名無しさん
09/06/25 16:42:13
URLリンク(wiki.tcl.tk)の{*}を使いたいのですが、

set l [list a b c [list e d]]
puts {*}$l

とやると、
wrong # args: should be "puts ?-nonewline? ?channelId? string"
というエラーが返ってきます。Tclのバージョンは8.5.7なのですが、
{*}の使い方が間違っているのでしょうか?どなたかご教示下さい。

482:デフォルトの名無しさん
09/06/25 21:05:19
いちいちeval使うのタリーから、リストを引き数に展開するようなコマンドとか欲しくなくね?
たとえば{*}$stdargとか

ってことを書いてるんであって、どこかにそんな実装があるという話じゃないです


483:デフォルトの名無しさん
09/06/25 21:48:00
えっ、これTcl8.5の新機能だよ。しかも新コマンドでもなくて正真正銘Tclの「文法」に対する拡張。


484:デフォルトの名無しさん
09/06/25 22:00:23
で、481が間違っているのはputsコマンドの使い方のほうですね。シェルのechoとかとは違います。

% puts a b c {e d}
wrong # args: should be "puts ?-nonewline? ?channelId? string"
% puts $l
a b c {e d}

485:デフォルトの名無しさん
09/06/25 22:21:46
>>481
puts {*}$l

puts a b c [list e d]
として実行されるからエラーになってあたりまえだ!

>>480
印刷ってなに?グラフの印刷?

486:481
09/06/25 22:26:27
>>484
>>485

ありがとうございました。
根本的に間違っていました。死にたいorz


487:デフォルトの名無しさん
09/06/30 22:18:47
ns-2でシミュレーションやりたいんでtcl覚えたいんだが、
オヌヌメの参考書とかあるのかよ?

488:デフォルトの名無しさん
09/07/01 00:14:21
Tcl/Tkデスクトップリファレンス
Effective Tcl/Tk
今となってはちょっと古いがわしはこれでおぼえた。


489:デフォルトの名無しさん
09/07/01 11:48:26
俺は言語の設計者が書いた本で勉強(日本語版)。
オヌヌメだけど、今では入手できないかも。

490:デフォルトの名無しさん
09/07/02 23:04:24
オレはggrksだけでなんとかしてる。
だから進歩が中途半端なのか。


491:デフォルトの名無しさん
09/07/04 00:53:29
俺の場合は具具って最初に出てきたもっとTcl/Tkってサイトで感触つかんで、
文法の意味が理解できればあとはマニュアルで十分って感じ。
ActiveTclのマニュアルで桶。
意味さえわかればdllやshared libraryで拡張するのも簡単だし。
ただ、Tclは印刷できないのがなぁ。

492:デフォルトの名無しさん
09/07/04 01:19:23
ns-2は確かにotclだが、次期バージョンのns-3はpythonになるそうな。
さよならotcl

493:デフォルトの名無しさん
09/07/04 16:50:59
流れ豚切りますが、

昔、tcl/tk8.0.5+日本語パッチ
というバージョンでは、kinput2 での日本語入力の制御ができました。
変換の開始・終了とか、入力モードの変更とか。
kinput_start などというコマンドがあったりします。

最近のバージョンはできるんでしょうか?


494:デフォルトの名無しさん
09/07/04 23:49:44
どんだけ昔の話だよ・・・。

495:デフォルトの名無しさん
09/08/01 14:27:22
切り出したい関数を必要な関数;サブ関数をインライン展開してくれるツール
があれば教えて下さい。変数名も可能なかぎり縮められたらと思います。
シェルに依存しないバイナリ化擬きが意図です

496:デフォルトの名無しさん
09/08/01 19:55:51
>>495
複数のTclスクリプトを1つのスクリプトにまとめる仕組みはあるようだけどな。
tcltest-2.3.0.tmとかにまとめられてるよね。
たぶんそういうツールで十分そうな気がする。

497:デフォルトの名無しさん
09/08/01 20:52:47
>>495
何がしたいか全然理解できない。インライン展開ってC++のインライン関数みたいなことを
言ってるのか?ていうか関数を切り出すってどういう意味?サブ関数はTclには無いし、
サブって何をさして言ってるの?それにシェルに依存しないって意味もわからない。
execコマンド使わずにTclで完結させればいいだけのことじゃないのか?なんなの?
ていうかバイナリ化もどきって要するに難読化したいってこと?ていうかそれが、関数の
切り出しとかいうのとどういう関係が?もうはっきり言って日本語で頼む。

498:デフォルトの名無しさん
09/08/02 14:08:59
TCL インタプリタのない環境でも動くスタンドアロンなアプリを作りたい、
でさらにサイズも最適化したい、ということでわ?

499:デフォルトの名無しさん
09/08/02 15:45:35
関数ライブラリから欲しいコマンドだけパッケージ化して切り出したい。
イメージ的にはinfo proc bodyですが関数の依存関係をトレースして必要十分な関数群も抜き出す。
関数をfalt化したり、冗長性を除去し、サイズ縮小化、難読化、再利用防止もしたい。
TCLインタプリタに依存したくないのでpure tclのパッケージ化したい。(見た目普通のテキストの関数定義)
ソースは1元管理してアプリ毎に合成したい。

500:デフォルトの名無しさん
09/08/02 21:23:26
Tclインタプリタに依存したくない、といった時点でTclインタプリタの実行ファイルにマージすることを意味するから、
シェル(OS)に依存するようになると思うんだがどうか?

501:デフォルトの名無しさん
09/08/02 21:53:14
ていうか変数名を短くしてサイズ縮小化とか、どんだけカツカツの環境なんだお

502:デフォルトの名無しさん
09/08/02 22:55:40
>>499
きっと8bitマイコンにでも乗せたいんだお。
PC-8001とかMZ-80で変数名削るのに苦労したお!!

503:デフォルトの名無しさん
09/08/05 17:50:56
テキストウィジェットにU+9FA6以上のUnicodeの文字を
張り付けようとすると反応が返ってこなくなるのですが
これはTkのバグでしょうか。

Tcl/Tk 8.5.7を Windows XPで使っています。

pack [text .t]
.t insert end \u9FA6

上のコードを実行するとWISH85.EXEがものすごい勢いでメモリを
消費します(´・ω・`)


504:デフォルトの名無しさん
09/08/06 21:38:42
>>503
vistaの8.5.6と8.6b1で試したけど、火編の常みたいなのが出てきた。

505:デフォルトの名無しさん
09/08/06 22:13:24
>>504

ありがとうございます。
Vistaの8.5.6と8.6b1では動くのですね。
XP機しかないのですが、とりあえず8.6b1で試してみます。

506:デフォルトの名無しさん
09/08/07 11:42:03
Windows VistaでClearTypeのメイリオを使っています。
その環境でTk 8.6のmenuを試してみたところ、メニュー・バーのフォントはClearTypeの効いた
ものになるのですが、メニュー・アイテムについてはそうなりません。
まぁ、メニュー・アイテムにClearTypeのフォントを設定すれば一応は解決できそうな感じはする
のですが、システムが使っているフォントを取得するようなコマンドはありますでしょうか?

507:デフォルトの名無しさん
09/08/10 18:13:43
>>506
メイリオを使っていたらcanvasをpostscriptに変換できないので、
if {[font configure TkDefaultFont -family] == "メイリオ"}
とかしてデフォで使用されるフォントの判別をしてメイリオだったらarialにするとかやってます(windowsとLinux両方で動かすためにこんなことしてます)。
ただ、メニューバーがメイリオになっているのにメニューアイテムのフォントだけ違うのという現象にこれで対処できるかどうかは不明ですが。

508:デフォルトの名無しさん
09/09/05 20:16:32
名前空間がどうしてもよくわからない
俺様かんたんに猿でも分かるように教えてください

509:デフォルトの名無しさん
09/09/05 20:53:49
>>508
あらら、名前空間なんて導入されたんだ。
C++では前からあったけど。

510:デフォルトの名無しさん
09/09/05 22:53:17
モジュール空間のことを言ってるんじゃないのかね。
確かに独特だわな。

511:デフォルトの名無しさん
09/09/06 21:07:57
namespace だから名前空間じゃないの?

512:デフォルトの名無しさん
09/09/06 22:13:13
>>511
モジュール書くときくらいしかほとんど用事がないんだがな。

513:デフォルトの名無しさん
09/09/10 20:59:54
初心者です。便乗質問(?)なのですが、自分で作ったライブラリは皆さん
パッケージ(モジュール?)にしてるのでしょうか?
自分はその方法が良く分からないので、とりあえずsourceコマンドで読むという
方法で凌いでます。

ところで、amazon.comによると、Tcl言語の設計者が書いた本の改訂版が出る
ようですね。Tcl/tk 8.5に対応した内容に書き改めたとのこと。
Tclが日本でも再度注目されたりしないでしょうか。

514:デフォルトの名無しさん
09/09/12 14:17:45
>>513
パッケージも結局内部ではloadやらsourceやらで読み込んでたと思います。

利点は、パスを書かずにパッケージ名だけで呼び出せるから、
位置関係を気にしなくてよくなることぐらいでしょうか。

書き方は >>1 の日本語サイトの1つめと2つめにそれぞれ解説があります。

515:デフォルトの名無しさん
09/09/12 21:44:21
>>514
ありがとうございます。参考になりました。
ただ、開発途上のモジュールについても、皆さんパッケージ化されているのでしょうか?
それなりの手順を踏まないとパッケージ化はできないようなので、モジュールの開発途上では、
やはり単にsource とかで読み込むのが普通なのでしょうかね?

516:本田
09/09/13 00:13:43
>Tcl言語の設計者が書いた本の改訂版が出るようですね。

90円台/ドルの円高なので今が廉く買うチャンスかも。

517:本田
09/09/13 00:42:31
package - パッケージのロードとバージョン制御機能。
URLリンク(www.freesoftnet.co.jp)

518:本田
09/09/13 02:48:50
>>515
ウェルチさんの本によると、
packageは複数のアプリケーションから利用する時に使うそうです。

519:デフォルトの名無しさん
09/09/13 11:47:25
>>508
変数名が名前だとすると、名前空間は苗字・・・。

>>509
10年前の8.0から導入されました・・・。

>>510
全然独特じゃないと思うけど・・・。名前空間がある言語ない言語あるけど、
変数名とかにprefixを付けてバッティングしないようにするという意味での
名前空間は汎用的なプログラミング概念だと思う。

>>511-512
8.5からはnamespace ensembleが入ったので名前空間にコマンド群を
まとめあげてサブコマンドを作ることも出来るようになった。。。
たしかにサブコマンドは名前空間の一種のような気もする・・・。

>>513
とりあえずsourceでいい。他人に配るときはpackageにするけど。
pacakgeなんて名前空間とそのバージョンを書いて、pkg_mkIndexするだけ。
大して難しいしくみでもない。

520:デフォルトの名無しさん
09/09/13 21:36:11
>>518 >>519
packageの件、ありがとうございました。開発が一段落するまではsourceでやってみます。


521:デフォルトの名無しさん
09/09/13 21:40:11
うむ。そうするがよい

522:デフォルトの名無しさん
09/09/16 13:33:42
>>519
(Tclのnamespaceが)
>全然独特じゃないと思うけど・・・。
普通、よくあるnamespaceの使い方は宣言的なものが多いんだけど、
Tclのnamespaceはただのコマンドなので、実行文的な書き方になる。

namespace eval { }
の中でnamespace export ...
とか呼び出すのとか、かなり変に感じる。

523:デフォルトの名無しさん
09/09/16 14:23:14
変に感じるのはそれだけじゃないだろう?(笑)
深く考えないのが吉。

524:デフォルトの名無しさん
09/09/16 20:25:51
>>521
審議中

525:デフォルトの名無しさん
09/09/16 20:38:09
>>522
それを言い出すとTclは制御文もコマンドだし・・・

526:デフォルトの名無しさん
09/09/22 16:44:34
すいません。Perl質問スレでも書きましたが、
こちらのほうが適切そうだったので、こちらで質問させてもらいます。

Perl TkのTextウィジェットを使って
文字列の入出力をする方法はどのようにするのでしょうか?
Entryウィジェットを使ったサンプルはWeb上から見つけたのですが、
Textウィジェットを用いたものはないもので。。。

527:デフォルトの名無しさん
09/09/22 18:09:24
>>526
Perl/Tkは触ったこと無いけど、
確かオライリーからまさにその本が出版されていたと思った。
それを購入するのが最終的には早いと思う。
日本でPerl/Tkは、ひどくマイナーだから。

あるいは、Ruby/Tkなら日本語の書籍が何冊か出版されているし、
Web/MLなどで情報の収集が容易だから、そちらに乗り換えるとか。
もちろんTcl/Tkでもオケー

ゴメン、これくらいしかレスできねえヨ

# いいレス返してあげておくれ > 他の住人さん達

528:デフォルトの名無しさん
09/09/23 07:29:32
Perl/Tkでググれ、としか

529:デフォルトの名無しさん
09/09/23 08:48:16
だな。一発でこんなん出たけど
URLリンク(www.geocities.jp)

530:本田
09/09/23 18:19:46
Mastering Perl/Tk
URLリンク(oreilly.com)
URLリンク(examples.oreilly.com)
URLリンク(examples.oreilly.com)

mastperltk_examples.tar.gz
の中にサンプルプログラム有り。

531:本田
09/09/23 18:23:42
Past, present and future of Tcl virtual filesystems Steve Huntley
URLリンク(www.tcl.tk)



532:デフォルトの名無しさん
09/09/23 19:10:25
>>530
一瞬、「サンプルプログラム祭り」に見えたw

Tcl/TKはいつまで経ってもマイナー言語のままだから、
簡単にこんなことができますよーって紹介はもっとあってもいいと思うけどね。

533:本田
09/09/23 19:12:57
P2P A Metafile System over P2P File-sharing Network
URLリンク(spa.jssst.or.jp)


534:本田
09/09/23 21:51:59
>>531
The FILTR:
(File Inventory for Loading, Transfer and Recovery)
URLリンク(filtr.sourceforge.net)
The FILTR is a program intended to be useful over the course of my lifetime.
It combines the features of a backup utility,
an archiving/version-control utility
and a document management utility to create an effective
and simple-to-use personal document management system.
Author: Stephen Huntley (stephen.huntley@alum.mit.edu)
License: Tcl license

535:デフォルトの名無しさん
09/09/29 11:04:56
流れを読まずに質問ッス
Text Widget で
・「文字単位」でTAB幅?TABインデント幅?を設定するにはどしたらええのん?
・一般的なエディタ(秀丸とかemacsとか)みたいなタブ文字でのインデントを実現できないのん?

TAB幅4文字で書かれたCのソースを、Text widgetで表示して色々する作業用スクリプトを書いてる最中なんですが、
  hogehoge(); // ほげほげ
的なコメントが、エディタ上ではインデントぴったりで綺麗に並んで書いてあるのに、Text Widgetではガタガタにずれて表示され
視認性がチョー悪く、作業効率も落ちるので、なんとかしたいのです

TkのText Widgetは、デフォルトでTAB幅8文字、tabsオプションで指定はできる、
というところまでは判って、要はTAB幅4文字に変更できれば解決かなと思ったのですが…

URLリンク(homepage3.nifty.com)
によると、「ピクセル」「mm」「inch」「cm」の4種類でしかtab stopsは設定できないと書いてあるし、
無理矢理ピクセルで指定してみても、TAB文字がそのまま「4文字相当の幅を常時取って」行の中に入ってしまうしで…

536:デフォルトの名無しさん
09/09/29 21:03:35
package require Tk
text .txt -font {"MS Gothic" 12}
button .b1 -text 4tab -command {settab 4}
button .b2 -text 8tab -command {settab 8}

pack .txt -side bottom
pack .b1 .b2 -side left


proc settab {n} {
set font [.txt cget -font]
.txt configure \
-tabstyle wordprocessor \
-tabs "[expr {$n * [font measure $font 0]}] left"
}

.txt insert 0.0 {
12345678901234567890123456789012345678901234567890
#include <stdio.h>

int main(int argc, const char** argv) {
printf();
return 0;
}

}


537:デフォルトの名無しさん
09/09/29 21:09:22
コピペ失敗した・・・前はタブは自動でスペースに置き換えてくれてた
木が刷るのにどういうことだ・・・・

package require Tk
text .txt -font {"MS Gothic" 12} -tabstyle wordprocessor
button .b1 -text 4tab -command {settab 4}
button .b2 -text 8tab -command {settab 8}

pack .txt -side bottom
pack .b1 .b2 -side left

proc settab {n} {
set font [.txt cget -font]
.txt configure -tabs "[expr {$n * [font measure $font 0]}] left"
}

.txt insert 0.0 {
12345678901234567890123456789012345678901234567890
#include <stdio.h>

int main(int argc, const char** argv) {
printf();
return 0;
}

}



538:デフォルトの名無しさん
09/10/01 10:00:31
>>536-537
ありがとうございます!
動かしてみたらたしかにTAB幅4文字っぽくなりました
Tcl/Tkは全く詳しくないので自信がないですが、おそらく
・ -tabstyle wordprocessor 指定
・ font measure でフォント1文字の横幅ドット数を取得
→TAB幅の文字数を掛けたピクセル数にして指定
が肝なのですかね…

実はTcl/TkじゃなくてPerl/Tkでスクリプトを書いてるんですが
Tcl/Tkのtext widgetで実現できているなら
Perl/Tkでも実現できるだろう…という前提で作業してみます

539:デフォルトの名無しさん
09/10/01 10:19:09
うーん…
Perl/Tkには-tabstyleが実装されてないみたいですね…
指定すると「そんな指定は知らねえよ」とエラーが出る…

URLリンク(cpansearch.perl.org)
↑「XXX not yet implemented?」とか書いてあるし…

URLリンク(www.tkdocs.com)
↑ここには、指定できる文字列としてtabstyleが書いてあるんだけどなあ…

勉強も兼ねてTcl/Tkで書き直してみるかな…
それとも Python + Tkinter も試してみるか…

540:デフォルトの名無しさん
09/10/01 19:17:49
Tk使うならTclが一番安心だよね。やっぱり

541:デフォルトの名無しさん
09/10/01 21:12:37
Tcl/TkじゃなくてPerl/Tkの話だから
スレ違いな気もしますが一応報告だけ

* text widgetにtabstyleが実装されたのは8.0.5から、らしい
* Perl/Tk(ActivePerl+Tk)は8.0.4相当。よって実装されてない
* Perl/TkでもTkxを使えばtabstyleが使える(TkxはTcl/Tkのコア部分をそのまま使ってるそうで…)
* Tkxを使うとパッと見でTcl/Tkそっくりの記述もできる(Tkx::text(".txt", )
* ActivePerlでTkxを使うとPARでexe化したときにActiveTclを要求されるので、exe化の意味なし
* Perl+Tkxでfont measureをどう記述するかが謎 ←今ココ

Tcl/Tkにも正規表現とハッシュ(連想配列)があるらしいから、書き直すのもアリかな…
GUIの見た目も、Tcl/Tkのほうが綺麗だし

542:デフォルトの名無しさん
09/10/01 21:52:01
tkのデバッグってどうしてます?
10時間くらいで落ちたり、処理速度が低下します。



543:デフォルトの名無しさん
09/10/01 22:29:37
>>542
???
tk4.2の頃は、そういうことあったけど……
8.3以上では直ってるはずだと聞いてるお?

ちなみに、
落ちると言っても、「tkが動かなくなる」だけ。
原因と対処法は自分で見つけた。もちろん、報告した。
処理速度の低下は、Xサーバーに問題があったので、ちょっと弄った。


544:デフォルトの名無しさん
09/10/02 23:38:25
変数に入っている値が整数(として扱える)かどうか調べる方法はありますか。

545:デフォルトの名無しさん
09/10/02 23:44:20
string is integer $x

546:デフォルトの名無しさん
09/10/03 23:31:56
>>545
やりたいことができた!他にも色々調べられるのね。ありがとうです(>_<)

547:デフォルトの名無しさん
09/10/05 18:16:08
>>545-546
まあその場合そのとおりなんだが、
Tcl/Tkの各コマンドのヘルプページはちょっと読みづらいよね。
PHPのヘルプ並みに使いやすく整備してくれるといいんだが……。

548:デフォルトの名無しさん
09/10/05 19:52:40
>>547
tclshでstring is って打つとコマンドの文法が出る。
string is a b って適当に打つと、クラスの一覧が
ズラズラ表示される。これで十分。

549:デフォルトの名無しさん
09/10/27 11:40:30
TCLスクリプトを自前アプリに実装したいのですが、
なにかお勧めの書籍(web)を紹介頂けませんか?



550:デフォルトの名無しさん
09/10/30 17:03:22
c++builder6で下記コードを実行するとstdoutが見つからないというエラーが表示されます。
>>301のログでTcl_SetStdChannel()で標準出力をトラップする見たいな事が記載されていますが、
どうやって行うのでしょうか?

strcpy( buf, "puts \"TEST!!\"");
Tcl_Eval( interp, buf );

エラーメッセージ:can not find channel named "stdout"


551:本田
09/10/30 22:58:47
>>549
C言語からTclを呼び出すには
URLリンク(www.geocities.co.jp)

552:デフォルトの名無しさん
09/11/02 13:03:10
CでTclを使えるようにする

Tcl_FindExecutable
Tcl_Interp
Tcl_Init

Tkも使えるようにする(MainWindow破棄でTk_MainLoopから戻る)
Tcl_FindExecutable
Tcl_Interp
Tcl_Init
Tk_Init
Tk_MainWindow
...
Tk_MainLoop

tclshみたいなプログラムにする(スクリプト終了でプログラム終了)
Tcl_Main
Tcl_AppInit中でコマンドの設定など

wishみたいなプログラムにする(スクリプト終了でプログラム終了)
Tk_Main
Tcl_AppIniti中でコマンドの設定など

拡張DLL(shared library)
dll名_Initという関数の中でコマンドの定義など

553:デフォルトの名無しさん
09/11/02 17:30:39
>>551,552

有り難うございます。
なんとか実行できる様になってきました。

基本的な事をお聞きしたいのですが、
複数行に渡るコマンド(forやwhileなど)を実行するにはTcl_Eval()では駄目なのでしょうか?

以下の様なコマンドをTcl_Eval()で1行づつ実行すると(1)は実行されますが、
(3)は実行されません。
Tcl_EvalFile()でまとめて実行すると、(3)も10回実行しますが、
Tcl_EvalFile()は全部終わるまで戻ってこないので、
Tcl_Eval()で1行づつ実行したいのです。

(1)puts "TEST!!"
(2)for { set i 0 } { $i<10 } { incr i } {
(3) puts "I is $i"
(4)}

554:デフォルトの名無しさん
09/11/02 18:02:38
553の続きです。
エラー処理を追加したらTcl_Eval()でエラーが発生して実行されていませんでした。

(2)→missing close-brace
(3)→can't read "i": no such variable
(4)→invalid command name "}"

試しに3行を1行にまとめたら実行できました。読みにくい・・・
for { set i 0 } { $i<10 } { incr i } { puts "I is $i" }

やはり複数行のコマンドは実行できないのかな・・・

555:デフォルトの名無しさん
09/11/03 23:15:44
{
}
の中の改行は文の終わりと認識されず、改行文字を含む文字列と認識されます。
forは引数を4つとるコマンドです。
for {set i 0} {$i < $N} {incr i} {
puts $i
}
は、たまたま第4引数が改行を含む文字列であるというだけのことです。


556:デフォルトの名無しさん
09/11/04 10:50:05
>>555

有り難うございます。

>>改行文字を含む文字列と認識されます。

for文などは普通は見易くする為に>>553の様に改行を入れて記述すると思います。
この様な記述をした場合には、第4引数が複数行になる為、
Tcl_Eval()を利用して1行づつ実行する事はできないという理解で良いですか?




557:デフォルトの名無しさん
09/11/04 10:53:58
>>556
というかC関数をTcl側に公開して、それをfor文で普通に呼び出せばいいんじゃね?
そしたら何度も呼び出すこと考える必要ないでしょ。

558:デフォルトの名無しさん
09/11/04 13:26:48
>>557

ありがとうございます。

>>C関数をTcl側に公開して

これの方法が現時点では分かりませんが、これが出来ればいけそうな気がしてきました。
早速調べて試してみます。

559:デフォルトの名無しさん
09/11/04 20:18:53
>>556
見やすくするためではありません。
for文が第四の引数を解釈するに当たり、改行までをひとつのコマンドと引数列とみなして実行するためです。
よって{}中の改行は飾りではないです。


560:デフォルトの名無しさん
09/11/04 20:24:23
>>558
Tcl_CreateObjCommand
引数の解釈はTcl_GetIntFromObjなどを使う。
返値はTcl_SetObjResultで。

Tcl_CreateCommandなどのTclオブジェクトを扱わない形式では
数値やリストなど全部文字列に変換されて渡されるので、速度・精度の面で使わないこと。
(Tclオブジェクトだとリスト型やdouble型を保持したままやりとりする)

561:デフォルトの名無しさん
09/11/04 20:30:04
んで、ぶっちゃけ言うと
Tcl_Eval(interp, "for {set i 0} {$i < 5} {incr i} {puts $i\nputs hogehoge}");

562:デフォルトの名無しさん
09/11/04 23:17:21
>>559-561

色々有り難うございます。
とりあえず、Tcl_CreateCommand()を使用してTCLスクリプトからCの関数を実行し、
パラメータを渡す事まで確認できました。
TCLで実現したい事は、「とりあえず」は出来たと思います。
残りは戻値や速度面を考慮してTcl_CreateObjCommand()などを調べて見たいと思います。


563:本田
09/11/21 06:24:51
URLリンク(www.tcl.tk)
>Tcl/Tk 8.5.8 Nov 16, 2009

564:デフォルトの名無しさん
09/12/11 19:14:03
Jaclてなんて発音すれば良いの?

565:デフォルトの名無しさん
09/12/11 21:05:06
ジャッカル

566:デフォルトの名無しさん
09/12/16 23:21:52
tclでhtmlを取り扱うウイジェット実装はいくつかあるみたいですが
お勧めとか、デファクトスタンダードなものとか
あるのでしょうか?

567:本田
09/12/18 00:55:20
>>566
>デファクトスタンダード

incrtclだと思う。
URLリンク(incrtcl.sourceforge.net)

568:デフォルトの名無しさん
09/12/20 02:07:53
板違いかもしれないけれど
Ruby/Tkで、
htmldoc = '<html>~</html>'
html = Tk::HTML_Widget.new.pack
html.parse(htmldoc)
とするとSegmentation faultが出るのは自分だけかな……。
TkHTML3、Tcl/Tk8.4、Ruby1.9.1環境です。

569:デフォルトの名無しさん
09/12/28 17:45:58
折角国際化されてるんだし
だれかTcl/Tkでmigemo使えるようにしろよ~

570:デフォルトの名無しさん
09/12/28 20:24:16
IMの制御がきちんとできるようにしてくれぇ。

571:デフォルトの名無しさん
09/12/29 09:37:18
結構この頃気に入っているのですが
ckて使っている人いますか?
なんか語りませんか

572:デフォルトの名無しさん
10/01/02 10:50:57
>> 571
大昔、CTk URLリンク(wiki.tcl.tk) は使ったことがある。
ckも2001年頃から開発が止まっているみたいけど、8.5.8環境でもちゃんと動く?


573:デフォルトの名無しさん
10/01/02 20:43:14
CkというのはURLリンク(www.ch-werner.de) なのですが
ページによると8.0-8.4が恐らくターゲットかと。うちでは8.0で動いています。
キャンバスなど対応しないウイジェットもあるので制限は多いですが、
Guiのプログラムとコンソールのプログラムが一つのプログラムでかけるのが
凄いです。(tcletも使えば一石三鳥?)
CTKはどんな感じでしたか?
Ckの場合難点はcursesを使う部分の日本語が上手く表示できないかんじです。
putsなど標準入出力ではOkですが。


574:本田
10/01/05 22:51:35
>Ckの場合難点はCkの場合難点はcursesを使う部分の日本語が上手く表示できないかんじです。

cursesってUNICODEに対応してないのかな?

575:デフォルトの名無しさん
10/01/06 23:26:35
ncursesw とかじゃん?

576:デフォルトの名無しさん
10/01/06 23:35:47
>>573
CTk使っていたのは日本語パッチ版が使いたくて8.0で粘っていたころなので、さすがに覚えていない。
当時はMulti-Byte文字を使えるcursesもほとんど無くて、日本語は最初から諦めていたと思う。

Multi-Byte文字はCkとcursesの2段階で対処が必要だと思うし、8.0だとそもそも多国語対応していない
ような気がするので、tcl内部とcursesと実際の表示(xtermとか)のencodingを合わせないとだめだよね。

がんばってね。


577:デフォルトの名無しさん
10/01/18 15:28:42
アプリケーション拡張言語としてのTCLってどうして普及しなかったんですか?

578:デフォルトの名無しさん
10/01/18 15:34:43
>>577
いや~、あんなもん、tkが付いてなかったら使いたくねえ!


579:デフォルトの名無しさん
10/01/18 15:39:50
>>577
tk以上の発明品が生まれなかったからじゃないかな。
結局Tcl/Tkが作られた当時はアプリのスクリプト言語をサポートするという発想が新しすぎたんだと思うよ。
後スクリプト言語としては文字列と整数のデータ型の区別がされてなくて微妙に使いにくいとか。

元々HTMLの埋込み言語として開発されたPHPが、発展してフレームワークが作られるようになると
HTMLの生成がテンプレートエンジン越しになって本来の埋込スクリプトが全く使われなくなったりね。

開発当初の目的と実用される用途が一致しないのはよくあること。

580:デフォルトの名無しさん
10/01/18 22:27:44
ストールマンがTclの普及自体に横槍出したのもでかいんじゃないかな

581:デフォルトの名無しさん
10/01/19 00:46:35
>>577
GNUに嫌われたから

582:デフォルトの名無しさん
10/01/19 12:33:16
>>580
guileも全然普及してないな。

583:デフォルトの名無しさん
10/01/19 21:15:09
GIMP は SIOD から TinyScheme に変わったんだよね。
Guile 哀れw

584:デフォルトの名無しさん
10/01/26 17:16:13
S-Langというのもあったけど。

585:デフォルトの名無しさん
10/02/03 23:03:23
TclはPythonに喰われちゃったんだと思う

586:デフォルトの名無しさん
10/02/14 10:09:59
今ならさらにLuaもあるしな。

587:デフォルトの名無しさん
10/02/14 20:52:36
>>585
蛙と蛇だしな・・・

588:デフォルトの名無しさん
10/02/14 22:29:44
デスクトップマスコットを作ろうかと思っているのですが、
ウィンドウを透過させて、画像だけを表示させるようなことは
tcl/tkでできるのでしょうか?

例えばこんな感じのを実現したいです
URLリンク(cgi32.plala.or.jp)

OSXを使用しているので、
システム透過色を背景色に設定させるようにしてみましたが、
思い通りの結果になりません。(タイトルバーが表示されていたりします)

package require Img
pack [canvas .can -width 300 -height 300]
image create photo foo -file circle.tif
.can create image 0 0 -image foo -anchor nw

wm attributes . -transparent 1
. configure -background systemTransparent
.can configure -background systemTransparent


589:デフォルトの名無しさん
10/02/15 01:13:58
osxはよくわからんけど、wm overrideredirect . 1してみたらどうなる?

590:デフォルトの名無しさん
10/02/15 08:16:09
やってみましたが、
ウィンドウのサイズ、移動が出来なくなりますが、
タイトルバーは消えませんでした。

591:デフォルトの名無しさん
10/02/15 21:37:46
>>588
バージョンくらいかけよアホ。これでも読んでろ
URLリンク(wiki.tcl.tk)

592:デフォルトの名無しさん
10/03/11 21:16:58
ActiveTcl 8.5.8.1を入れたら、Tkのtextで日本語入力するとwishが落ちるようになった。
text .t; pack .t -expand yes -fill both だけのプログラムでも再現する。
IMEで1バイト文字を選択して確定しても落ちるのでIME制御で何か壊しているみたい。
こんな時に限って旧のバックアップが無いので確認できないけど8.5.8は大丈夫と思う。
だれか8.5.8残している人。ください。

593:デフォルトの名無しさん
10/03/13 16:38:51
ほしゆ

594:デフォルトの名無しさん
10/03/17 02:28:47
C++/Tcl 凄いな。

595:デフォルトの名無しさん
10/03/17 23:05:28
>>594
ksk

596:本田
10/03/17 23:34:20
>>592
ActiveTcl8.5.8.0.291595-win32-ix86-threaded.exe

597:592
10/03/18 21:26:34
>>596
ActiveState ポリシー変えたらしくて、Community Edition(Free)は最新バージョンしか
入手できなくなってます。
しばらくはtclkitでしのぎます。


598:本田
10/03/18 22:48:35
>>597
ActiveTcl8.5.8.0.291595-win32-ix86-threaded.exe でgoogleれ。

599:デフォルトの名無しさん
10/03/18 22:54:45
本田氏の本気を見た(いりこだし的な意味で)

600:592
10/03/18 23:39:47
>>598
それらしいURLを3つくらい見てダメだったので諦めていましたが、15番目で見つかりました。
どうもありがとう。


601:デフォルトの名無しさん
10/04/27 22:17:26
perl tkでtxtウィジェット中に1秒間隔で
文字列を表示させることを考えていますがうまくいきません。

ソースは下になります。
何かおかしな点ありますでしょうか?

-----
$window1 = MainWindow->new();
$frame1 = $window1->Frame()->pack();
$output = $frame1->Scrolled('Text')->pack(-expand=>1, -fill=>'both');

for($cnt=0; $cnt<1000; $cnt++){
$output_tmp = "$cnt" . "\n";
$output->insert("end", $output_tmp);
$output_tmp = "";
sleep(1);
}

MainLoop();
-----

602:デフォルトの名無しさん
10/04/27 23:35:32
perl tkは知らんけどtcl/tkで定期的に処理を実行する時はafterコマンドを使う
リファレンスマニュアルとか調べてみ

603:デフォルトの名無しさん
10/04/28 06:29:41
どううまくいかないのかを書きなさい。

604:デフォルトの名無しさん
10/04/29 06:13:30
>>602
ありがとうございます。ちょっと調べてみます。

>>603
上記ソースの場合、立ち上がりすらしない。
sleepをコメントアウトしたら1行づつ出力されずに、
溜め込んだ情報を一気に吐き出すといった感じです。

605:デフォルトの名無しさん
10/04/29 15:45:57
>>601
描画はevent loop(MainLoop)で実行されると思うので、MainLoopの前でsleepしたら
描画出来ないと思う。
ループを切り出して、適当なeventを契機に呼ばれるようにすれば良いと思う。
どうしても今のループにしたければ、updateすると動くかもしれない。


606:デフォルトの名無しさん
10/04/29 21:57:57
>>605
updateでできました!
ありがとうございました_( . _ . )_


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch