gyn

Win32下的Perl,无用的select,停滞的Tk,结束吧....

Tk中维护顶层显示的堆栈及其方法

bugd 中,总是会需要弹出一些信息框来收集一些用户选项,其中不乏类似于 combobox 这样提供一串信息的。针对不同的弹出框,应该有不同的信息来填充。更一般的说,针对不同的框,应该有其特有的一组数据。为了区别这些框,不得不维护一个全局变量来存储显示在最外层的 toplevel 的路径,在其退出之后再被重新赋予下一个层次的 toplevel ,直至到“ . ”。这不是一个好办法,因为为了存储这一系列的变化,必须对应数量可观的全局变量,至少两个:一个前一次,一个当前,而这仅仅是应对单层次弹出的情况。

其实很容易想到的一个办法是维护一个堆栈,一旦有新的 toplevel 出现,就被压入堆栈,销毁的时候在 pop 出来。我们不需要为此修改每一个 toplevel 的构造函数,只需要建立 <Map> <Destroy> 的事件句柄。举个例子如下:

bind Toplevel <Map>   {_tPush %W}

bind Toplevel <Destroy> {_tPop  %W}

 

proc _tPush {w} {

    global top_stack

    if {[lindex $top_stack 0] ne $w} {

       set top_stack [linsert $top_stack 0 $w]

    }

}

 

proc _tPop {w} {

    global top_stack

    if {[lindex $top_stack 0] eq $w} {

       set top_stack [lreplace $top_stack 0 0]

    }

}

posted on 2009-01-05 16:30 gyn_tadao 阅读(349) 评论(1)  编辑 收藏 引用 所属分类: TclTk

评论

# re: Tk中维护顶层显示的堆栈及其方法 2009-01-07 23:22 网赚

_stack   回复  更多评论   

只有注册用户登录后才能发表评论。
<2009年1月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

常用链接

留言簿(15)

随笔分类(126)

随笔档案(108)

相册

搜索

最新评论

阅读排行榜

评论排行榜