トップページtech
981コメント378KB

●●●●TCL/TKなら俺に聞け 2●●●●

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/05/01(火) 14:52:44
【英語サイト】
プロジェクト本拠地
http://tcl.sourceforge.net/
最新版ソースコード
ftp://ftp.tcl.tk/pub/tcl/nightly-cvs/
The Tcler's Wiki
http://wiki.tcl.tk/
The comp.lang.tcl Newsgroup
http://groups.google.com/group/comp.lang.tcl/
ActiveTcl
http://www.activestate.com/products/activetcl/

【日本語サイト】
もっとTcl/Tk
http://www.interq.or.jp/japan/s-imai/tcltk/
Tcl/Tk Scripting Laboratory
http://www.geocities.jp/urano343/tcltk.html
Tcl/Tk Primer
http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/tcltk_primer/
Tcl 8.4.1 Manual Command Reference
http://www.freesoftnet.co.jp/tclkits/doc/TclCmdRef/tcl_contents_jp.htm
CategoryTclTk - mynote
http://reddog.s35.xrea.com/wiki/CategoryTclTk.html

【前スレ】
●●●●TCL/TKなら俺に聞け●●●●
http://pc11.2ch.net/test/read.cgi/tech/1033628416/
0452デフォルトの名無しさん2009/04/19(日) 23:29:22
>>451
ズバリこれですね感謝です
ddeコマンドとやらで代用できるぽいのでちょっと試してみます
0453本田2009/04/26(日) 19:36:30
The Tcl UDP extension provides a simple library to support UDP socket in Tcl.
http://sourceforge.net/projects/tcludp
0454本田2009/04/29(水) 00:21:55
>>452
dde
http://wiki.tcl.tk/996
tcom
http://wiki.tcl.tk/1821
optcl
http://wiki.tcl.tk/1822

activex controlを使うにはtcomではなくoptclを使う。
0455デフォルトの名無しさん2009/04/29(水) 22:24:57
Active Tcl/Tk ver.8.5.7 になった。
0456デフォルトの名無しさん2009/05/09(土) 20:09:14
John Ousterhout博士インタビュー
http://www.computerworld.com.au/article/301772/a-z_programming_languages_tcl
「やっぱOO入れときゃよかったかもね」的発言も。
0457デフォルトの名無しさん2009/05/09(土) 20:14:56
>>456
それはooを取り込もうとがんばってるCoreTeamの
活動を支援するリップサービスでは・・・
0458デフォルトの名無しさん2009/05/14(木) 20:41:38
plplotをWindows上のTCL/TKで使いたいのですが、すぐに動くバイナリは無いものでしょうか?
探した限りは無いようですが…
0459デフォルトの名無しさん2009/05/15(金) 09:09:34
ちょっと見てみたが、そもそもソースコードしか配布されて無いように見える。
素直に自分でビルドしてみたら?
0460デフォルトの名無しさん2009/05/15(金) 21:19:57
>>459
やはりソースだけですか… LinuxだとRPMがあるみたいですが…
コンパイルとなると敷居が高そうなので、ちょっと他を探してみます
ありがとうございました。
0461デフォルトの名無しさん2009/05/15(金) 22:39:19
ttp://dishaw.org/plplot/
0462デフォルトの名無しさん2009/05/16(土) 09:24:34
>>461
ありがとうございます! 早速見てみます
0463デフォルトの名無しさん2009/06/08(月) 20:51:13
ちょっと相談に乗ってくください
Windowsでdqkitを使ってexeにラッピングしてるのですが
set cmd "wish C:/tcl/main.exe/sub.tcl $args &"
eval exec $cmd
例えばですが ↑みたいな感じでsubプロセスを動かしたいのですが動かないんですよね

ttp://www.interq.or.jp/japan/s-imai/tcltk/tclkit2.html
> Starpackにラップした実行形式(.exe)は、execコマンドあるいはパイプで実行できない。

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

で、さっきも言ったようにexe化ツールは複数あるから、共通の土台で話ができないよ。
exe化ツールのドキュメントやフォーラムの漁ってみるべし。
0465デフォルトの名無しさん2009/06/08(月) 22:35:31
どもです
いくつか比較して今のdqkitが一番適してる感じだったのですが
他の方法も検討してみます

とりあえず現状で思いついた案としてはsub側も.exeにラッピングして
exeを2個体制で・・・スマートじゃないなぁ
0466デフォルトの名無しさん2009/06/08(月) 22:41:14
一次情報に当たれと言ってるんだ。
自分の頭の中だけじゃ解決しない問題だろ。
0467デフォルトの名無しさん2009/06/09(火) 19:18:33
ActiveStateのツールじゃだめなのかいな?
0468デフォルトの名無しさん2009/06/09(火) 19:50:12
BLTと日本語を使いたいのでなるべくならdqkitが良かったんですよね
Freewrap日本語化版とかTclPro1.3じゃBLTを使うのが大層面倒っぽかったので。

ActiveStateのってTclDevKitでしょうか?
とりあえずBLT使えるか心配なのと仕事でも使いたいのでライセンスも心配ですが
ちょっと試してみます
ありがとうございました
0469デフォルトの名無しさん2009/06/10(水) 00:50:29
wishをサブプロセスで動かすの前提なら別にexeにしなくてもいいんじゃないの?とか言ってみる
0470デフォルトの名無しさん2009/06/10(水) 18:33:01
>>468
ちょっと話が変わって申し訳ないんだけど、BLTってまだメンテされてるんでしょうか?
自分も使おうかと思ってたんですけど、どっかでメンテされてないって読んだので、
躊躇している次第です。
0471本田2009/06/10(水) 20:26:49
>>470
CVSはまだメンテナンスされてる様だ。
http://blt.cvs.sourceforge.net/viewvc/blt/blt/
0472デフォルトの名無しさん2009/06/10(水) 21:22:33
躊躇って何を躊躇すんの?使ったら何かを失うわけでもないのに
0473デフォルトの名無しさん2009/06/11(木) 08:03:07
>>472
業務用のシステムなので、継続的なメンテナンスが見込めそうなのはやはり使いにくい
のですよ。
0474デフォルトの名無しさん2009/06/13(土) 19:55:17
SolarisのCDEでwish使ってるんですが、
Tkのウィンドウだけマウスポインタが通過するだけで
最前面にraiseされてしまいます。
他のウィンドウは大丈夫なのに、なんでだろ。

CDEの設定では
『ポインタでウィンドウをアクティブにするけど、
ウィンドウ順は変えない』
としているので、Tk以外のウィンドウはクリックしない限り
raiseはされないんですが、Tkだけマウスが通っただけで
ウィンドウの前後関係が変わってしまいます。
0475デフォルトの名無しさん2009/06/14(日) 11:09:44
->465
ご本家のTclkitのページ(http://www.equi4.com/tclkit/docs.html)に
 Don't expect exec and popen to work on files in VFS
と書いてあるので、execはイモ筋(dqkitでも多分ダメ)
やりたいことがよくわからないがdqkitはMT版があるので、
複数のプログラムを同時に別のスレッドで走らせる筈。
0476デフォルトの名無しさん2009/06/17(水) 17:31:59
TclOOで自分が作ったクラスのサブクラスって、どうやって作るんでしょうか?
0477デフォルトの名無しさん2009/06/17(水) 21:51:18
oo::class create mobile {
method bell {} {puts PURURURU}
}

oo::class create softbank {
superclass mobile
}
0478デフォルトの名無しさん2009/06/18(木) 10:09:49
>>477
ありがとうございました。理解できました。
検索しても見つけられなかったので助かりました。
0479デフォルトの名無しさん2009/06/23(火) 05:40:16
なんか最近tcllibがあわただしいと思ってたら、
GSoC 2009のプロジェクトでgraph操作の実装をやってるところだったのね。

http://wiki.tcl.tk/23203
0480デフォルトの名無しさん2009/06/23(火) 12:51:03
印刷サポートもやるみたいね
0481デフォルトの名無しさん2009/06/25(木) 16:42:13
ttp://wiki.tcl.tk/17158の{*}を使いたいのですが、

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

とやると、
wrong # args: should be "puts ?-nonewline? ?channelId? string"
というエラーが返ってきます。Tclのバージョンは8.5.7なのですが、
{*}の使い方が間違っているのでしょうか?どなたかご教示下さい。
0482デフォルトの名無しさん2009/06/25(木) 21:05:19
いちいちeval使うのタリーから、リストを引き数に展開するようなコマンドとか欲しくなくね?
たとえば{*}$stdargとか

ってことを書いてるんであって、どこかにそんな実装があるという話じゃないです
0483デフォルトの名無しさん2009/06/25(木) 21:48:00
えっ、これTcl8.5の新機能だよ。しかも新コマンドでもなくて正真正銘Tclの「文法」に対する拡張。
0484デフォルトの名無しさん2009/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}
0485デフォルトの名無しさん2009/06/25(木) 22:21:46
>>481
puts {*}$l

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

>>480
印刷ってなに?グラフの印刷?
04864812009/06/25(木) 22:26:27
>>484
>>485

ありがとうございました。
根本的に間違っていました。死にたいorz
0487デフォルトの名無しさん2009/06/30(火) 22:18:47
ns-2でシミュレーションやりたいんでtcl覚えたいんだが、
オヌヌメの参考書とかあるのかよ?
0488デフォルトの名無しさん2009/07/01(水) 00:14:21
Tcl/Tkデスクトップリファレンス
Effective Tcl/Tk
今となってはちょっと古いがわしはこれでおぼえた。
0489デフォルトの名無しさん2009/07/01(水) 11:48:26
俺は言語の設計者が書いた本で勉強(日本語版)。
オヌヌメだけど、今では入手できないかも。
0490デフォルトの名無しさん2009/07/02(木) 23:04:24
オレはggrksだけでなんとかしてる。
だから進歩が中途半端なのか。
0491デフォルトの名無しさん2009/07/04(土) 00:53:29
俺の場合は具具って最初に出てきたもっとTcl/Tkってサイトで感触つかんで、
文法の意味が理解できればあとはマニュアルで十分って感じ。
ActiveTclのマニュアルで桶。
意味さえわかればdllやshared libraryで拡張するのも簡単だし。
ただ、Tclは印刷できないのがなぁ。
0492デフォルトの名無しさん2009/07/04(土) 01:19:23
ns-2は確かにotclだが、次期バージョンのns-3はpythonになるそうな。
さよならotcl
0493デフォルトの名無しさん2009/07/04(土) 16:50:59
流れ豚切りますが、

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

最近のバージョンはできるんでしょうか?
0494デフォルトの名無しさん2009/07/04(土) 23:49:44
どんだけ昔の話だよ・・・。
0495デフォルトの名無しさん2009/08/01(土) 14:27:22
切り出したい関数を必要な関数;サブ関数をインライン展開してくれるツール
があれば教えて下さい。変数名も可能なかぎり縮められたらと思います。
シェルに依存しないバイナリ化擬きが意図です
0496デフォルトの名無しさん2009/08/01(土) 19:55:51
>>495
複数のTclスクリプトを1つのスクリプトにまとめる仕組みはあるようだけどな。
tcltest-2.3.0.tmとかにまとめられてるよね。
たぶんそういうツールで十分そうな気がする。
0497デフォルトの名無しさん2009/08/01(土) 20:52:47
>>495
何がしたいか全然理解できない。インライン展開ってC++のインライン関数みたいなことを
言ってるのか?ていうか関数を切り出すってどういう意味?サブ関数はTclには無いし、
サブって何をさして言ってるの?それにシェルに依存しないって意味もわからない。
execコマンド使わずにTclで完結させればいいだけのことじゃないのか?なんなの?
ていうかバイナリ化もどきって要するに難読化したいってこと?ていうかそれが、関数の
切り出しとかいうのとどういう関係が?もうはっきり言って日本語で頼む。
0498デフォルトの名無しさん2009/08/02(日) 14:08:59
TCL インタプリタのない環境でも動くスタンドアロンなアプリを作りたい、
でさらにサイズも最適化したい、ということでわ?
0499デフォルトの名無しさん2009/08/02(日) 15:45:35
関数ライブラリから欲しいコマンドだけパッケージ化して切り出したい。
イメージ的にはinfo proc bodyですが関数の依存関係をトレースして必要十分な関数群も抜き出す。
関数をfalt化したり、冗長性を除去し、サイズ縮小化、難読化、再利用防止もしたい。
TCLインタプリタに依存したくないのでpure tclのパッケージ化したい。(見た目普通のテキストの関数定義)
ソースは1元管理してアプリ毎に合成したい。
0500デフォルトの名無しさん2009/08/02(日) 21:23:26
Tclインタプリタに依存したくない、といった時点でTclインタプリタの実行ファイルにマージすることを意味するから、
シェル(OS)に依存するようになると思うんだがどうか?
0501デフォルトの名無しさん2009/08/02(日) 21:53:14
ていうか変数名を短くしてサイズ縮小化とか、どんだけカツカツの環境なんだお
0502デフォルトの名無しさん2009/08/02(日) 22:55:40
>>499
きっと8bitマイコンにでも乗せたいんだお。
PC-8001とかMZ-80で変数名削るのに苦労したお!!
0503デフォルトの名無しさん2009/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がものすごい勢いでメモリを
消費します(´・ω・`)
0504デフォルトの名無しさん2009/08/06(木) 21:38:42
>>503
vistaの8.5.6と8.6b1で試したけど、火編の常みたいなのが出てきた。
0505デフォルトの名無しさん2009/08/06(木) 22:13:24
>>504

ありがとうございます。
Vistaの8.5.6と8.6b1では動くのですね。
XP機しかないのですが、とりあえず8.6b1で試してみます。
0506デフォルトの名無しさん2009/08/07(金) 11:42:03
Windows VistaでClearTypeのメイリオを使っています。
その環境でTk 8.6のmenuを試してみたところ、メニュー・バーのフォントはClearTypeの効いた
ものになるのですが、メニュー・アイテムについてはそうなりません。
まぁ、メニュー・アイテムにClearTypeのフォントを設定すれば一応は解決できそうな感じはする
のですが、システムが使っているフォントを取得するようなコマンドはありますでしょうか?
0507デフォルトの名無しさん2009/08/10(月) 18:13:43
>>506
メイリオを使っていたらcanvasをpostscriptに変換できないので、
if {[font configure TkDefaultFont -family] == "メイリオ"}
とかしてデフォで使用されるフォントの判別をしてメイリオだったらarialにするとかやってます(windowsとLinux両方で動かすためにこんなことしてます)。
ただ、メニューバーがメイリオになっているのにメニューアイテムのフォントだけ違うのという現象にこれで対処できるかどうかは不明ですが。
0508デフォルトの名無しさん2009/09/05(土) 20:16:32
名前空間がどうしてもよくわからない
俺様かんたんに猿でも分かるように教えてください
0509デフォルトの名無しさん2009/09/05(土) 20:53:49
>>508
あらら、名前空間なんて導入されたんだ。
C++では前からあったけど。
0510デフォルトの名無しさん2009/09/05(土) 22:53:17
モジュール空間のことを言ってるんじゃないのかね。
確かに独特だわな。
0511デフォルトの名無しさん2009/09/06(日) 21:07:57
namespace だから名前空間じゃないの?
0512デフォルトの名無しさん2009/09/06(日) 22:13:13
>>511
モジュール書くときくらいしかほとんど用事がないんだがな。
0513デフォルトの名無しさん2009/09/10(木) 20:59:54
初心者です。便乗質問(?)なのですが、自分で作ったライブラリは皆さん
パッケージ(モジュール?)にしてるのでしょうか?
自分はその方法が良く分からないので、とりあえずsourceコマンドで読むという
方法で凌いでます。

ところで、amazon.comによると、Tcl言語の設計者が書いた本の改訂版が出る
ようですね。Tcl/tk 8.5に対応した内容に書き改めたとのこと。
Tclが日本でも再度注目されたりしないでしょうか。
0514デフォルトの名無しさん2009/09/12(土) 14:17:45
>>513
パッケージも結局内部ではloadやらsourceやらで読み込んでたと思います。

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

書き方は >>1 の日本語サイトの1つめと2つめにそれぞれ解説があります。
0515デフォルトの名無しさん2009/09/12(土) 21:44:21
>>514
ありがとうございます。参考になりました。
ただ、開発途上のモジュールについても、皆さんパッケージ化されているのでしょうか?
それなりの手順を踏まないとパッケージ化はできないようなので、モジュールの開発途上では、
やはり単にsource とかで読み込むのが普通なのでしょうかね?
0516本田2009/09/13(日) 00:13:43
>Tcl言語の設計者が書いた本の改訂版が出るようですね。

90円台/ドルの円高なので今が廉く買うチャンスかも。
0517本田2009/09/13(日) 00:42:31
package - パッケージのロードとバージョン制御機能。
http://www.freesoftnet.co.jp/tclkits/doc/TclCmdRef/TclCmd/package_jp.htm
0518本田2009/09/13(日) 02:48:50
>>515
ウェルチさんの本によると、
packageは複数のアプリケーションから利用する時に使うそうです。
0519デフォルトの名無しさん2009/09/13(日) 11:47:25
>>508
変数名が名前だとすると、名前空間は苗字・・・。

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

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

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

>>513
とりあえずsourceでいい。他人に配るときはpackageにするけど。
pacakgeなんて名前空間とそのバージョンを書いて、pkg_mkIndexするだけ。
大して難しいしくみでもない。
0520デフォルトの名無しさん2009/09/13(日) 21:36:11
>>518 >>519
packageの件、ありがとうございました。開発が一段落するまではsourceでやってみます。
0521デフォルトの名無しさん2009/09/13(日) 21:40:11
うむ。そうするがよい
0522デフォルトの名無しさん2009/09/16(水) 13:33:42
>>519
(Tclのnamespaceが)
>全然独特じゃないと思うけど・・・。
普通、よくあるnamespaceの使い方は宣言的なものが多いんだけど、
Tclのnamespaceはただのコマンドなので、実行文的な書き方になる。

namespace eval { }
の中でnamespace export ...
とか呼び出すのとか、かなり変に感じる。
0523デフォルトの名無しさん2009/09/16(水) 14:23:14
変に感じるのはそれだけじゃないだろう?(笑)
深く考えないのが吉。
0524デフォルトの名無しさん2009/09/16(水) 20:25:51
>>521
審議中
0525デフォルトの名無しさん2009/09/16(水) 20:38:09
>>522
それを言い出すとTclは制御文もコマンドだし・・・
0526デフォルトの名無しさん2009/09/22(火) 16:44:34
すいません。Perl質問スレでも書きましたが、
こちらのほうが適切そうだったので、こちらで質問させてもらいます。

Perl TkのTextウィジェットを使って
文字列の入出力をする方法はどのようにするのでしょうか?
Entryウィジェットを使ったサンプルはWeb上から見つけたのですが、
Textウィジェットを用いたものはないもので。。。
0527デフォルトの名無しさん2009/09/22(火) 18:09:24
>>526
Perl/Tkは触ったこと無いけど、
確かオライリーからまさにその本が出版されていたと思った。
それを購入するのが最終的には早いと思う。
日本でPerl/Tkは、ひどくマイナーだから。

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

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

# いいレス返してあげておくれ > 他の住人さん達
0528デフォルトの名無しさん2009/09/23(水) 07:29:32
Perl/Tkでググれ、としか
0529デフォルトの名無しさん2009/09/23(水) 08:48:16
だな。一発でこんなん出たけど
http://www.geocities.jp/m_hiroi/perl_tk/perltk07.html
0530本田2009/09/23(水) 18:19:46
Mastering Perl/Tk
http://oreilly.com/catalog/9781565927162
http://examples.oreilly.com/9781565927162/
http://examples.oreilly.com/9781565927162/mastperltk_examples.tar.gz

mastperltk_examples.tar.gz
の中にサンプルプログラム有り。
0531本田2009/09/23(水) 18:23:42
Past, present and future of Tcl virtual filesystems Steve Huntley
http://www.tcl.tk/community/tcl2007/papers/Stephen_Huntley/tcl2006_slides_huntley.pdf

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

Tcl/TKはいつまで経ってもマイナー言語のままだから、
簡単にこんなことができますよーって紹介はもっとあってもいいと思うけどね。
0533本田2009/09/23(水) 19:12:57
P2P A Metafile System over P2P File-sharing Network
http://spa.jssst.or.jp/WIT/2005/papers/05013.pdf
0534本田2009/09/23(水) 21:51:59
>>531
The FILTR:
(File Inventory for Loading, Transfer and Recovery)
http://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
0535デフォルトの名無しさん2009/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文字に変更できれば解決かなと思ったのですが…

http://homepage3.nifty.com/kaku-chan/tcl_tk/chapter_230.html
によると、「ピクセル」「mm」「inch」「cm」の4種類でしかtab stopsは設定できないと書いてあるし、
無理矢理ピクセルで指定してみても、TAB文字がそのまま「4文字相当の幅を常時取って」行の中に入ってしまうしで…
0536デフォルトの名無しさん2009/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;
}

}
0537デフォルトの名無しさん2009/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;
}

}

0538デフォルトの名無しさん2009/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でも実現できるだろう…という前提で作業してみます
0539デフォルトの名無しさん2009/10/01(木) 10:19:09
うーん…
Perl/Tkには-tabstyleが実装されてないみたいですね…
指定すると「そんな指定は知らねえよ」とエラーが出る…

http://cpansearch.perl.org/src/SREZIC/Tk-804.028_501/t/text.t
↑「XXX not yet implemented?」とか書いてあるし…

http://www.tkdocs.com/tutorial/text.html
↑ここには、指定できる文字列としてtabstyleが書いてあるんだけどなあ…

勉強も兼ねてTcl/Tkで書き直してみるかな…
それとも Python + Tkinter も試してみるか…
0540デフォルトの名無しさん2009/10/01(木) 19:17:49
Tk使うならTclが一番安心だよね。やっぱり
0541デフォルトの名無しさん2009/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のほうが綺麗だし
0542デフォルトの名無しさん2009/10/01(木) 21:52:01
tkのデバッグってどうしてます?
10時間くらいで落ちたり、処理速度が低下します。

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

ちなみに、
落ちると言っても、「tkが動かなくなる」だけ。
原因と対処法は自分で見つけた。もちろん、報告した。
処理速度の低下は、Xサーバーに問題があったので、ちょっと弄った。
0544デフォルトの名無しさん2009/10/02(金) 23:38:25
変数に入っている値が整数(として扱える)かどうか調べる方法はありますか。
0545デフォルトの名無しさん2009/10/02(金) 23:44:20
string is integer $x
0546デフォルトの名無しさん2009/10/03(土) 23:31:56
>>545
やりたいことができた!他にも色々調べられるのね。ありがとうです(>_<)
0547デフォルトの名無しさん2009/10/05(月) 18:16:08
>>545-546
まあその場合そのとおりなんだが、
Tcl/Tkの各コマンドのヘルプページはちょっと読みづらいよね。
PHPのヘルプ並みに使いやすく整備してくれるといいんだが……。
0548デフォルトの名無しさん2009/10/05(月) 19:52:40
>>547
tclshでstring is って打つとコマンドの文法が出る。
string is a b って適当に打つと、クラスの一覧が
ズラズラ表示される。これで十分。
0549デフォルトの名無しさん2009/10/27(火) 11:40:30
TCLスクリプトを自前アプリに実装したいのですが、
なにかお勧めの書籍(web)を紹介頂けませんか?

0550デフォルトの名無しさん2009/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"
0551本田2009/10/30(金) 22:58:47
>>549
C言語からTclを呼び出すには
http://www.geocities.co.jp/SiliconValley/4137/dir4/namo.html
■ このスレッドは過去ログ倉庫に格納されています