2016-06-23 16 views
0

ライセンスの可用性に基づいてフレームの色を変更するためのtclスクリプトを作成しています。ライセンスが利用可能な場合は、赤色の青色が表示されます。これは、procごとにtclを使用して周期的に実行され(フレームの色は可用性に基づいて変更されます)。条件チェックに基づいてフレームの色を変更する

しかし、私はパックを再描画することを忘れてしまいましたが、連続したループでウィジェットは既に存在しています。私はサポートされていないので、フレームカラーのconfigureコマンドを使用することができません。 解決策を提案してください。

#!/tools/tcl/tcl8.6/bin/tclsh -f 

package require Tk 

proc checkLic {} { 
    set val [exec lmstat -a -c /tools/license/dat/cadence_orbit_3x.dat -f Liberate_MX_Client | grep issued | awk {{print $11}}] 
    puts $val 
    if {$val == 0} { 
     after 1000 
     pack forget .high 
     after 1000 
     frame .high -width 8 -height 30 -background blue 
     pack .high -side right 
    } else { 
     after 1000 
     pack forget .high 
     after 1000 
     frame .high -width 8 -height 30 -background red 
     pack .high -side right 
    } 
} 

proc every {ms body} { 
    eval $body 
    after $ms [info level 0] 
} 

every 1000 {checkLic} 
+1

パックは忘れてはウィジェットを破壊しない、それだけで、ウィンドウから削除します。同じウィジェットを複数回忘れて再管理することができます。 –

+0

なぜコールバックの中で '' 1000 'の後にまっすぐに置いていますか? –

+0

あなたの問題をうまく解決するために私の答えを更新しました。 –

答えて

1

私の答えは、申し訳ありません。私はあなたがすでにカバーしていたことに気付かずに背景を表示する方法に集中しました。このコードは、あなたが言及している更新の問題なしに振動ディスプレイをどのように得ることができるかを示しています。基本的に、コードはフレームを一度作成した後、色を変更する代わりに色を変更し、再作成しようとします。

set gval 0 

frame .high -width 8 -height 30 -background blue 
pack .high -side right 

proc checkLic {} { 
    # replace this with your own lookup code 
    set val [set ::gval [expr {!$::gval}]] 

    puts $val 
    if {$val == 0} { 
     .high configure -background blue 
    } else { 
     .high configure -background red 
    } 
} 

proc every {ms body} { 
    eval $body 
    after $ms [info level 0] 
} 

every 1000 {checkLic} 

旧答え:

基本frameその背景は表示されませんので、親から任意のウィンドウ領域を要求しません。これは、青い四角のように見えるはず

frame .high -height 20 -width 20 -background blue 
pack .high 

を:あなたは高さを設定し、明示的に幅ができた背景が見えるように

。フレーム要求のウィンドウ領域を作るために

もう一つの方法は、それにコンテンツを提供することですが、あなたは境界線の幅を指定しない限り、背景がまだ表示されません:あなたは背景を変更することができますいずれの場合も

frame .high -borderwidth 10 -background blue 
pack .high 
label .high.txt -text foobar 
pack .high.txt 

このような色:

.high configure -background red 

それはあなたがlabel代わりのframeを使用したほうが良いだろうと考えられます。

label .high -width 5 -background blue 
pack .high 
.high configure -background red 

labelを使用すると、背景色を変更する代わりにアイコンを切り替えることができます。

ドキュメント:afterevalexprframeifinfolabelpackprocputsset

関連する問題