●●●●TCL/TKなら俺に聞け 2●●●●at TECH
●●●●TCL/TKなら俺に聞け 2●●●● - 暇つぶし2ch874:本田
12/03/04 23:41:21.56
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)


875:本田
12/03/04 23:44:36.35
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)

876:本田
12/03/04 23:47:21.25
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)

877:デフォルトの名無しさん
12/03/07 20:28:21.05
TclでCのstatic宣言みたいなのができるとありがたいです。
いい方法はないでしょうか?

たとえば,プロシージャの中で,呼ばれた回数に依存した処理をするような場合,
下のように,global変数をインクリメントしたりしてますが,
他のglobal変数とぶつかったりしないか心配で,夜も眠れません。
namespaceだと大げさになりそうで。

proc foo {} {
global bar

if [info exists bar] {
incr bar
} else {
set bar 1
}

# 呼ばれた回数に依存する処理
}


878:デフォルトの名無しさん
12/03/07 22:30:41.71
>>877
URLリンク(wiki.tcl.tk) の下から二番目のスニペットとか。

879:本田
12/03/07 23:08:53.76
>>877
singleton application
URLリンク(wiki.tcl.tk)

880:デフォルトの名無しさん
12/03/09 20:33:11.94
>>878
>>879
おふた方ともありがとうございます。
やっぱりそんな簡単にはいかないですね。

それにしても反応早すぎw


881:デフォルトの名無しさん
12/03/10 11:07:27.49
間違えた。
速すぎ。

882:デフォルトの名無しさん
12/03/14 18:44:21.69
>>877
namespace大げさではけど、使いづらいとは思う。

もともと[incr Tcl]を取り込んだという割には、
名前空間付きの変数を作るitcl::scopeに相当するコマンドがなかったり、
プロシージャは見えるのに変数はvariableなしでは見れなかったりというのが使いづらい。

883:882
12/03/14 18:45:23.25
x 大げさではけど
o 大げさではないけど

884:デフォルトの名無しさん
12/04/16 17:32:28.78
tk_getOpenFile でショートカット指すとホンモノの名前が返ってきて読むとき便利だけど、ショートカット入ってたディレクトリーがどこだかわからない。どうすりゃ判るの?


885:デフォルトの名無しさん
12/04/17 11:23:18.41
tk_getOpenFileはショートカット(.lnk)ファイルそのものを返すことはできない。
Tkの組み込みコマンドなのでスクリプトで改造もできない。
OSネイティブのきれいなダイアログじゃなくてよければ可能。

::tk::dialog::file:: open

tk_getOpenFileコマンドがないときに使われる古いダイアログみたい。

詳しくは以下参照。
$::tk_library/tk.tcl
$::tk_library/tkfbox.tcl

886:デフォルトの名無しさん
12/04/17 11:28:02.15
>>884
URLリンク(wiki.tcl.tk)

887:デフォルトの名無しさん
12/04/17 21:42:15.41
>>885
>>886
884です。貴重なコメントありがとうございます。
いずれにしてもかなり敷居が高そうですね。

取り敢えずは回避策を軸に考えます。



888:デフォルトの名無しさん
12/04/26 15:47:16.82
>>887

全然敷居高くないよ。単に見た目が違うのを我慢してと言ってるだけ。

::tk::dialog::file:: open

というコマンドは、tk_getOpenFileと同じオプションを指定できるから
オプションは同じでコマンドだけ置き換えればおk

889:デフォルトの名無しさん
12/05/01 21:23:39.21
URLリンク(jim.tcl.tk)
Tcl8.6 のサブセットの Jim Tcl、本体は 8 ビットクリーンなのですが、内蔵ラインエディタが悪さしてシェル上での日本語入力を通しません。
それで、以下のようにしてその内蔵ラインエディタを外せばシェル上でも日本語を受け付けるようになります (CP932 でエスケープ文字と 2
バイト目が重なるようなものも、波かっこで挟んでエスケープ処理を抑制すれば入れられます)。
./configure --utf8 --disable-lineedit
utf8 のフォーマットに合う場合だけ utf8 として処理し、それ以外は単に 1 文字 8 ビットの文字列として処理します。Tcl8.6 の CVS 版に先
駆け、1 文字が 5 バイト長の utf8 文字列も取り扱えます。
なお、configure の処理実体が Tcl コードのため、そのままでのコンパイルには別の Tcl が必要です。

URLリンク(www.hecl.org)
Tcl 似の超コンパクトな言語 Hecl の方も、内蔵のラインエディタ jLine が日本語入力の邪魔をしているようですが、こちらは完全に組み込
まれているので、ソース自体の書き換えが必要になります (この理由で、jLine を外せば問題が解決するかどうかまでは試していません)。

890:デフォルトの名無しさん
12/05/02 23:32:02.54
configureがtclだと、、、?マジカヨ、、


891:デフォルトの名無しさん
12/05/04 10:40:49.18
>>888
884です。ご教唆ありがとう。これで読むとショートカットは尻に".lnk"が付いているので区別できるようですね。
次はショートカット・ファイルからリンク先を取り出す方法に格闘します。


892:デフォルトの名無しさん
12/05/05 00:53:02.81
>>891
ずいぶん難しいことしてるね。
Windowsのショートカットファイルはバイナリフォーマットだから自力で解析するよりtwapiを使うのがよいと思うよ。
URLリンク(goo.gl)

893:デフォルトの名無しさん
12/05/06 16:30:46.62
>>892
884です。何から何まで ありがとうございます。
尻が".lnk"のファイルは twapi::read_shortcut でホンモノの名前を白状させることができました。
お蔭様で、見掛けはしょぼく 中身が立派なスクリプトができました。


894:デフォルトの名無しさん
12/05/12 09:00:26.16
ここ読んでる人たちはEDA関連の人たちが多いんだろうなー

895:デフォルトの名無しさん
12/05/18 22:51:20.91
64bit用のtcl8.5のtcom.dllどこかにないでしょうか
tcl8.6 64bit用のtcom.dllは見つけたのですが・・・

URLリンク(www.tin-pot.coco.mydisk.se)

tcomはソースがあるから何とかなりそうだけど、コンパイルやったことない。。。
twapiが代わりになるけど、こっちはExcelとかのオブジェクトを自動でに開放してくれない(´・ω・`)

どなたか手段わかりませんでしょうか

896:デフォルトの名無しさん
12/05/19 00:05:40.60
おれもWindows7 64ビットにしたとき、
Tclも64ビットライブラリで作り直したかったけど、
依存する奴全部揃えられなくて諦めた。
まあ64ビットにしないといけないアプリじゃなかったし。

で、tcomみたいなOFFICEアプリ?とかを操作するのに
64ビットじゃないといけないの?答えになってないが。

897:デフォルトの名無しさん
12/05/19 01:56:01.60
>>896
まあ、office操作自体は確かに64bitにする必要がないんです

とあるソフトに32bit版と64bit版があって、
これにそれぞれ32bitと64bitのtclが組み込まれていているんですが、
自分が32bitで動くスクリプトを作った後に、
それをそのまま64bitに持っていったらdllの問題で組み込めなかった・・・

悔しい。

という話です。。
64bitのPCに32bitのそのソフトをインストールすれば動作自体はするのですが。

898:デフォルトの名無しさん
12/05/25 16:17:21.15
>>861 のベンチマークはちょっと変えるとTclが圧倒的に速くなるよ。
[Ruby1.9.3]
+ str=str.gsub(/efgh/, "____")
gstr+=str;
- gstr=gstr.gsub(/efgh/, "____")
exec.tm.sec str.length
2sec 256kb
略)
395sec 3840kb
455sec 4096kb
[Tcl8.5.11]
+ regsub -all {efgh} $str ____ str
append gstr $str;
- regsub -all {efgh} $gstr ____ gstr
exec.tm.sec str.length
0sec 256kb
略)
0sec 3840kb
0sec 4096kb

899:デフォルトの名無しさん
12/06/17 21:24:30.09
ジオメトリーマネージャ(pack, grid, place)の働きが
イマイチよくわかりません。通り一遍のことはぐぐれば
わかりますが、ちょっと凝ったことをしようとすると
どれを選んでどういったオプションを指定すればよいか
いつも迷ってしまいます。
何かこうスッキリわかりやすく解説してくれてるとこって
ないですかね。書物は、この手のものはたいてい
高額なのでちょっと手が出ないかな。。。


900:デフォルトの名無しさん
12/06/18 07:52:40.33
>>899
僕も最初はあいまいなまま結果オーライで使ってたけど、Ruby/Tkの本が丁寧な解説で役立ったよ。
Rubyを256倍使うための本・界道編
URLリンク(goo.gl)

901:デフォルトの名無しさん
12/06/18 09:01:28.10
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘

902:デフォルトの名無しさん
12/06/18 22:46:47.84
>>900
256倍シリーズってまだあったんですね。
確かにあれはわかりやすいかも。
Rubyは盲点でした。


903:デフォルトの名無しさん
12/06/19 06:41:21.59
grid最強
pack, placeは後方互換用と思ってよい

…とtkdocsのサイトには書いてあった
URLリンク(www.tkdocs.com)

904:デフォルトの名無しさん
12/06/19 19:32:26.30
>>903
packはともかくplaceは置き換えられない部分があると思うなあ。
右上とか右下にくっついて動くロゴみたいなのはgridだとかえって難しい気がする。
gridのコマ割り考えるのも結構面倒。

905:デフォルトの名無しさん
12/06/19 22:00:48.41
pack,place,gridだけで配置するより、ある程度区切ったらframeを乗せて
その中で個別にpack,place,grid使って配置した方が楽

906:デフォルトの名無しさん
12/06/19 22:03:34.92
placeはゲームのようなドット単位で指定したりするときに便利。
俺はTkでそういうのを作る機会がなかったので使ったことがないけど。
gridが全てにおいて万能というわけでもない。

907:デフォルトの名無しさん
12/06/20 14:33:31.82
place使ってプログレスバーを作ってる例ならあるよ。Ruby/Tkだけど。
URLリンク(www.dumbo.ai.kyutech.ac.jp)


908:デフォルトの名無しさん
12/06/22 20:34:56.08
tclでテキスト処理して結果をxterm -e w3mで出力させたいのですが、以下のようにしても動きません。
どのようなやり方で出力させればよいでしょうか?

% tclsh
% set a "
test
test
"
% exec xterm -e "echo $a | w3m "



909:デフォルトの名無しさん
12/06/30 01:51:50.71
>>908
意図がよくわからないんだけど、aの中身はホントはHTMLにして
ターミナルにw3mでレイアウト表示したいってことなら、

set ch [open |[list w3m -T text/html << $a] r]
puts [read $ch]; close $ch

一応w3mが整形したとおりに出力される。

910:デフォルトの名無しさん
12/06/30 01:59:12.62
あ、xtermってあれか、Xのターミナルエミュレータか。
じゃあ、ちょっと違うかな。
リダイレクトのバリエーションでTclのチャネルを別プロセスに渡す方法とかあるみたいだから見てみたらいいかもしれない。
URLリンク(www.tcl.tk)

911:デフォルトの名無しさん
12/07/01 08:06:09.94
>>909,910
909を見てて下を試しましたら、出力することができました。

% exec xterm -e "w3m << a
$a
"
ありがとうございました。

912:デフォルトの名無しさん
12/07/28 08:05:27.41
Tcl/Tk 8.5.12 Release Announcement
July 27, 2012


913:デフォルトの名無しさん
12/08/02 19:12:11.95
ActiveTcl 8.5.12.0
URLリンク(www.activestate.com)

914:本田
12/08/02 23:54:45.63
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)
URLリンク(downloads.activestate.com)

915:デフォルトの名無しさん
12/09/12 07:36:14.95
PTさん、8.5.12のtclkit作ってくれないのかなぁ


916:デフォルトの名無しさん
12/09/27 00:17:38.23
pack [frame .f -background ""] -fill both -expand 1
ってやると,色々配置したウィンドウを見た目変えずに一気に無効にできる。
destroy .f
で有効化。
だから何っていわれてもアレだけど。

917:デフォルトの名無しさん
12/10/05 20:50:57.35
>>915 こんなんありますけど
URLリンク(www.cqi.com.tw)



918:デフォルトの名無しさん
12/10/05 22:25:49.47
>>916
確かにマニュアルにもframeの-bg ""の挙動は書いてあるけど、Windows7+Tk 8.5.11だとバグってるっぽい。
なぜか一旦destroyしてもう一回 frame作るとそれっぽい動きにはなる。最大化するとやっぱりいろいろおかしい。
Linuxだと問題ないのかな。

button .b1 -text hoge
button .b2 -text hoge
place .b1 -x 10 -y 10
place .b2 -x 50 -y 50
pack [frame .f -background ""] -fill both -expand 1

919:デフォルトの名無しさん
12/11/20 00:18:52.14
保守?

920:デフォルトの名無しさん
12/11/26 18:33:59.94
Latest Release: Tcl/Tk 8.5.13 (Nov 12, 2012)

921:デフォルトの名無しさん
12/12/08 02:46:12.21
今、html5がやろうとしてることって、もともとtcl/tkがやろうとしてたことだよね
何で政治的に負けちゃったんだろう

922:デフォルトの名無しさん
12/12/15 17:34:24.88
expectもTCLだからここで聞いていいよね

expectというかtclで、設定ファイルを読みたい
bashのように、設定ファイルと見せかけて実は実行 でもいい

ロードかインクルードの方法ってありますか?

923:デフォルトの名無しさん
12/12/15 20:09:19.04
>>922
sourceじゃダメなのか?
>>920
ActiveTcl来た
PTさんのtclkitも来た

924:デフォルトの名無しさん
12/12/17 13:28:41.57
そろそろ8.6がリリースされるんじゃないかと思って
今年4月にPro Studioのサブスクリプションを自腹で1年延長してみたものの、
8.6に対応するときはメジャーアップデートでアップグレード対象外になる可能性に今頃気付いた。
そんなもったいないことしてる人は他にいないと思うが。。。
でもいいの。ActiveTclだけでもリリースし続けてくれてるだけで満足でございます。

925:デフォルトの名無しさん
12/12/24 22:46:13.42
ついにTcl/Tk 8.6が12/20にリリースされました。

926:デフォルトの名無しさん
12/12/26 21:31:39.97
SL4AでTcl動かそうと思ったけど、うまくいかんな。つまらん

927:デフォルトの名無しさん
13/01/18 03:10:56.99
ubuntuが出すタブレットPCでも動くのかな?

928:デフォルトの名無しさん
13/01/21 19:38:03.19
ActiveTcl 8.6.0.0リリースだよ。

929:デフォルトの名無しさん
13/02/19 07:16:05.65
特定のwidgetだけ再描画することは出来ないでしょうか?
textに数千行読む時にprogressbarを更新したいけど、その他の再描画は無駄なので止めたいのです。
updateだと全体を再描画になります。

930:デフォルトの名無しさん
13/02/21 22:20:12.72
特定widgetだけ再描画する方法は分からないけど、
textへの追加を1行ずつしないで、全部を一旦変数に入れて一発でinsertする、じゃダメなの?

931:デフォルトの名無しさん
13/02/22 21:07:25.94
C:\Program Files\Tcl\demos\Tk8.5\widget.tcl
Scales and Progress Bars 4. Progress bar
はupdate なし
configure命令

932:デフォルトの名無しさん
13/02/23 21:44:59.02
Tkの部品はconfig命令を使うと色や形の現在値は変更できるが、Tkは高速化の為に画面への反映は遅延表示させているので途中経過を表示せずにいきなり最終結果が表示されたりする。
プロバー表示では現在値を強制表示させる為にupdate命令を使うのが定石だがこれが禁じ手になると結構難しいか。

①930番さんの様にまとめて一発表示
②update命令間隔をを10秒置きとか極端に長くする
③その他の部品はforgetオプション等で退避しておいて後で表示
④?
ところでTkのtext表示は普通はそんなに遅くはないが改行文字なしの長い行を表示させると異様に遅くなるみたい。

933:デフォルトの名無しさん
13/03/06 21:36:21.62
SSD環境なので参考にならんかもしれませんが、2000文字x5000行のファイルでは、
5行おきのアップデートにすると秒単位で高速化されました。
それでもプログレスバー表示しない場合の11.5倍時間がかかりました。

create_file: 483288 microseconds per iteration
gets_lines: 271409 microseconds per iteration
read_bulk: 252275 microseconds per iteration

test_full_update: 5123759 microseconds per iteration
test_skip_update: 3374500 microseconds per iteration
test_no_update: 291779 microseconds per iteration
test_bulk_insert: 285029 microseconds per iteration

934:デフォルトの名無しさん
13/03/09 03:48:33.45
最初にファイルサイズ取得して、サイズに応じてupdateする行数変更するとか。
5000行のファイルに5行おきにプログレスバーを更新するってのが...

935:デフォルトの名無しさん
13/03/12 17:51:41.39
tcl8.6爆速なんだけど↓からだいぶ状況変わったの?
URLリンク(d.hatena.ne.jp)
この速さはただの再帰もループになってる?

5桁とかになると1分以上かかって他に大きく離される
これはループにしても変わらないから多倍長ライブラリの性能かな

936:デフォルトの名無しさん
13/03/12 18:29:56.59
すまん関数名同じだからかんちがいした
fib 38は固まるわ

937:デフォルトの名無しさん
13/03/12 22:01:59.60
>935
私の中古機械で試してみた。式をまとめると約10倍速くなった
どうしてこんなに違うのか??
fib <39088169> term <80312600 microseconds per iteration>
proc fib {n} {
if {$n < 2} { return $n }
return [expr {[fib [expr {$n - 1}]] +[fib [expr {$n - 2}]]}]
}

fib <39088169> term <714145387 microseconds per iteration>
proc fib {n} {
if {$n < 2} { return $n }
set a [expr $n - 2]
set b [expr $n - 1]
set x [fib $a]
set y [fib $b]
return [expr $x + $y]
}

938:デフォルトの名無しさん
13/03/15 22:54:42.21
>>937
exprの引数を{ }で囲むだけでだいぶ違うな

939:デフォルトの名無しさん
13/03/15 23:06:47.65
初心者が初心者に嘘を教えるスレです

940:デフォルトの名無しさん
13/03/15 23:08:30.06
exprの引数を{ }で囲むのは8.6以前からの定石。
2回評価させないようにする。

941:デフォルトの名無しさん
13/03/23 22:06:55.05
937です。より速くより汚く
proc fib {n} {
if {$n < 2} { return $n }
return [expr {[fib [incr n -2]] +[fib [incr n ]]}]
}
fib <39088169> term <72891401 microseconds per iteration> でした。

935 引用のページからC++を複写してVisualC++Express2008(要するに無料ソフト)を使って実行してみた
fib44=701408733
fib45=1134903170
fib46=1836311903
fib47=-1323752223
fib48=512559680

tcl/tk(ver8.5.13)でfib47 は
fib <2971215073> term <1253824233 microseconds per iteration>
1254秒!!。鈍足で正確でした。なっとく

速度、精度、価格、安直さ、どれも一つの側面でしかなく、それらを総合的に評価して最適ソフトを選択することが肝要だと思う。

942:929
13/03/24 10:09:02.93
ありがとうございます。規制されてて遅くなりました。
progressbarはupdate idletasksで表示が更新されましたが、古いPCのWindowsXPでは5~6秒程度updateしないと
メニュー部分が白くなって、その後はprogressbarも更新されなくなります。(update idletasksではダメ)
ということで、数秒おきにupdateしないとprogressbarが更新されません。
見た目を重視しているので無駄はあきらめることにしました。

943:デフォルトの名無しさん
13/03/31 08:08:41.45
Tcl/Tk 8.4.20予告 6/1(随分さきの話だが)に最終版リリース予定らしい。まだ8.4.を改良してたのか。
Tcl/Tk 8.4.20 Release Announcement
June 1, 2013

The Tcl Core Team is pleased to announce the 8.4.20 releases of the Tcl
dynamic language and the Tk toolkit. This is the twentieth and *FINAL*
patch release of Tcl/Tk 8.4. With this release, support for Tcl/Tk 8.4
comes to an end.

944:デフォルトの名無しさん
13/04/03 22:36:01.28
Tcl/Tk 8.5.14 Release Announcement
April 3, 2013

945:デフォルトの名無しさん
13/04/09 21:46:20.56
>>5の予想を裏切り2014年まで持つ勢いだが、
ActiveTcl 8.6.1.0とTclDevKit 6.0の登場が変えてくれることを願う。


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