我是ITCL的新手可以帮助我如何将以下代码从Tcl转换为itcl
catch { namespace delete ::HVToolSet }
namespace eval ::HVToolSet { } {
}
proc ::HVToolSet::Main {} {
if {[winfo exists .main]} {
destroy .main
}
set ::HVToolSet::base [toplevel .main]
variable tab_frame
set x 200
set y 200
wm geometry $::HVToolSet::base ${x}x${y}+100+0
wm title $::HVToolSet::base "Chevron's Build Effective Stress Results Tool"
wm focusmodel $::HVToolSet::base passive
set creatFrame [frame .main.mnFrame]
pack $creatFrame -side top -anchor nw -expand 1 -fill both -padx 7 -pady 7
button $creatFrame.okbutton -text "OK" -command ::HVToolSet::okcall
pack $creatFrame.okbutton -side top
}
proc ::HVToolSet::okcall {} {
::HVToolSet::checkRun "right"
}
proc ::HVToolSet::checkRun {val} {
set abc 10
::newspace::exec $abc # another name space method calling
}
::HVToolSet::Main
答案 0 :(得分:1)
首先,映射不准确。你正在从一个没有班级的系统转向一个系统,这是一个基本而微妙的差异。
然而,粗略地说,一个过程成为一个方法,一个命名空间成为一个类。这至少是做什么的第一个近似值:
package require Itcl
itcl::class HVToolSet {
# Shared over all instances (and unused otherwise?!)
common variable tab_frame ""
# Specific to each instance of this class
private variable base ""
# 'Main' seemed to be a constructor of some sort
constructor {{win .main}} {
if {[winfo exists $win]} {
destroy $win
}
set base [toplevel $win]
set x 200
set y 200
wm geometry $base ${x}x${y}+100+0
wm title $base "Chevron's Build Effective Stress Results Tool"
wm focusmodel $base passive
set creatFrame [frame $base.mnFrame]
pack $creatFrame -side top -anchor nw -expand 1 -fill both -padx 7 -pady 7
button $creatFrame.okbutton -text "OK" -command [itcl::code okcall]
pack $creatFrame.okbutton -side top
}
# Obvious destructor...
destructor {
destroy $base
}
# Callback, best done as private method
private method okcall {} {
$this checkRun "right"
}
# Public method...
method checkRun {val} {
set abc 10
::newspace::exec $abc ; # another name space method calling
}
}
# Make an instance of the class that operates with the window .main
HVToolSet myInstance .main
确定需要构造函数的内容,私有方法以及公共方法可以采取的一些想法。通常,构造函数会创建和初始化事物,私有方法只在类中有意义(例如,处理回调或重构复杂的东西),公共方法在外部调用时可能意味着什么。