2016-08-30 3 views
1

私は、非常に面倒なGUIがtclsh/wishで書かれたソフトウェアパッケージを持っています。私はターミナルを介してソフトウェアを制御し、それを実行するためのスクリプトを作成したいと考えています。 GUIが欲しいのはかなり長いです(37000行以上)ので、詳細を読んで、それぞれのコマンドラインインターフェイスを書くのは避けてください。入力したいフィールドのボタンのシーケンスと入力フィールドをすでに知っているとします。ターミナル経由でGUI GUIモンスターをコントロールする方法はありますか?ウィンドウシェル(wish/tclsh)GUIをバイパスして代わりにターミナルを使用する方法はありますか?

GUIを介して呼び出されます。私は-fフラグを削除しても、それが任意の端末入力を取るか、または%プロンプトが表示されないであろう

exec wish -f $PROGRAM_PATH/program.tcl -n program wish $PROGRAM_PATH $* 

。私は、-nフラグに続く部分を理解していません。私はそれを削除する場合、プログラムは同じ実行されます。

単に

wish $PROGRAM_PATH/program.tcl 
を呼び出す

つまりは同じことを行います。

-fileフラグも試してみましたが、コマンドで外部ファイルを提供しましたが、すべての内部変数とルーチンが定義される前にこれらのコマンドを入力しようとしましたが、認識できないコマンドになりました。

誰でも、スクリプト作成を希望する便利な情報源を教えていただけますか?

答えて

1

あなたは入力フィールドの.Eを持つプログラムprog.tcl、そしてボタン.B持っていた場合:あなたはこのようなスクリプトを使用することができます

#!/usr/bin/tclsh 

package require Tk 

set e {} 

proc dump { } { 
    global e 
    puts $e 
} 

ttk::label .l -text Entry: 
ttk::entry .e -textvariable e 
grid .l .e 
ttk::button .b -text button -command dump 
grid .b -column 2 

それを実行するには:

#!/usr/bin/tclsh 

package require Tk 

source prog.tcl 

set tv [.e cget -textvariable] 
set $tv mydata 
.b invoke 
update 

をこれはあなたのソースがある場合にのみ動作します。

エントリフィールドにデータを入力するイベントを生成する代わりに、関連する変数を取得して必要な値に設定する方が簡単です。ボタンは簡単です。コンボボックス(ドロップダウン)、チェックボックス、スケール、ラジオボタンもあります。私はこれらのメソッドを私の自動化されたテストに広く使用しています。

エントリとボタンの名前を調べるには、コードを読む必要があります。

Windowsの場合は、自動ホットキープログラムを試すこともできます。

+0

完璧な、まさに私が探していたもの。どうもありがとうございました。 – lixpas

+0

ちょうど次の質問:GUIをまったく表示せず、コマンドだけを実行することは可能でしょうか?私はX転送を必要としないように。私は、コンピューティングノードに直接ログインしていないコンピュータクラスタでこのプログラムを使用したいと考えています。 – lixpas

+0

私はそうは思わない。おそらく、仮想Xディスプレイ(Xvfb)を使用することができます。 –

関連する問題