Tcl/Tk 进度系统 可以点状态与时间

本文档展示了如何使用Tcl/Tk来管理进度系统,包括接收、处理和工作收集等阶段。通过定义game_over过程检查任务是否完成,并提供write_job过程更新任务状态。同时,click_proc处理不同阶段的按钮点击事件,动态改变按钮状态。此外,read_job读取并显示任务列表,而new则用于创建新的任务。
摘要由CSDN通过智能技术生成


#!/bin/sh
# -*- tcl -*- \
exec tclsh "$0"  ${1+"$@"}
 
package require Iwidgets

set p8 .label
toplevel $p8
set ecn_dir "d://ecn"

global  loger
set loger zd
array set phase {
0  "\u63A5 \u6536"
1  "Proc1"
2  "Proc2"
3  "\u5DE5 \u6536"
4  "\u5BE9\u6838\u7D50\u6848"
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
proc game_over {} {
 global ecn_dir  p8
 set job [$p8.frame1.jobname getcurselection]
 source [file join $ecn_dir $job]
 for {set i 0} {$i < 4} {incr i} {
  if {[lindex [set [set job]($i)] 0] == "x"} {return 1}
 }
 if {[lindex [set [set job](4)] 0] == "x"} {
  return 1
 } else {
  return 0
 }

}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
proc write_job {job index butt} {
 global ecn_dir loger
 source [file join $ecn_dir $job]
 set now_date [clock format [clock seconds] -format %m%/%d%#%H:%M:%S]
 if {$butt == 0} {
  set [set job]($index) [list $now_date $loger x x]
 } else {
  set [set job]($index) [list [lindex [set [set job]($index)] 0] [lindex [set [set job]($index)] 1] $now_date $loger]
 }
 set ecn_bakjob [open $ecn_dir/$job.tmp a+]
 set ecn_openjob [open $ecn_dir/$job r+]
 gets $ecn_openjob line
 puts -nonewline $ecn_bakjob $line\n
 for {set i 0} {$i < 5} {incr i} {
  puts -nonewline $ecn_bakjob [list $i   [set [set job]($i)] ]\n
 }
 puts -nonewline $ecn_bakjob \}
 puts -nonewline \n
 close $ecn_bakjob
 close $ecn_openjob
 file rename -force "$ecn_dir/$job.tmp" "$ecn_dir/$job"

}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
proc click_proc {loger} {
 global p8 ecn_dir phase deal_job index
 set deal_job [$p8.frame1.jobname getcurselection]
 set deal_state [$p8.frame1.state get]
 source [file join $ecn_dir $deal_job]                           
                set mingzi [array names db_p]
                set suv 0

                foreach name $mingzi {
                             if {[lindex $db_p($name) 0] ==  $loger &&  [lindex $db_p($name) 3] == "suv" ||  [lindex $db_p($name) 0]  == "suv1" }    { set  suv 1} { puts "welcome"}
               }


######[lindex [set [set deal_job](0)] 0] 这里deal_job不是直接数组名###
######[lindex [set deal_job(0)] 0] 这里deal_job是直接数组名###

 switch -- $deal_state {
 "\u63A5 \u6536" {if {[lindex [set [set deal_job](0)] 0] != "x"} {
    $p8.frame1.startbut configure -state disabled
   } else {
    $p8.frame1.startbut configure -state normal
   }
                                 if {[lindex [set [set deal_job](0)] 2] != "x"} {
    $p8.frame1.endbut configure -state disabled
   } else {
    $p8.frame1.endbut configure -state normal
   }
                set index 0
                }
 "Proc1"  {if {[lindex [set [set deal_job](1)] 0] != "x"} {
    $p8.frame1.startbut configure -state disabled
   } else {
    $p8.frame1.startbut configure -state normal
   }
     if {[lindex [set [set deal_job](1)] 2] != "x"} {
    $p8.frame1.endbut configure -state disabled
   } else {
    $p8.frame1.endbut configure -state normal
   }
   set index 1
   }
 "Proc2"  {if {[lindex [set [set deal_job](2)] 0] != "x"} {
    $p8.frame1.startbut configure -state disabled
   } else {
    $p8.frame1.startbut configure -state normal
   }
     if {[lindex [set [set deal_job](2)] 2] != "x"} {
    $p8.frame1.endbut configure -state disabled
   } else {
    $p8.frame1.endbut configure -state normal
   }
   set i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值