【问题标题】:Want to open tcl/tk code in single window想在单个窗口中打开 tcl/tk 代码
【发布时间】:2015-08-28 09:41:40
【问题描述】:

我想在单个窗口中运行以下 tcl/tk 代码,但是当我使用 wish yep.tcl 运行下面的代码时,它会打开两个窗口,如下图所示。我只想要一个窗口,即okie

需要进行哪些更改?

proc yep {} {
    toplevel .t
    wm geometry .t 300x200-5+40
    wm title .t "okie"
    label .t.n -text "CELL"
    grid .t.n -rowspan 2 -columnspan 5
}
yep

【问题讨论】:

    标签: tcl tk


    【解决方案1】:

    除了名为. 的默认窗口之外,您正在创建另一个顶层窗口.t。要仅使用单个窗口,请使用默认窗口或撤销默认窗口。

    使用默认值

    proc yep {} {
        wm geometry . 300x200-5+40
        wm title . "okie"
        label .n -text "CELL"
        grid .n -rowspan 2 -columnspan 5
    }
    yep
    

    撤销默认

    proc yep {} {
        toplevel .t
        wm geometry .t 300x200-5+40
        wm title .t "okie"
        label .t.n -text "CELL"
        grid .t.n -rowspan 2 -columnspan 5
    
        # Hide the unwanted window
        wm withdraw .
        # Make the application go away when we close the visible window
        wm protocol .t WM_DELETE_WINDOW { exit }
    }
    yep
    

    【讨论】:

      【解决方案2】:

      命令toplevel 创建一个额外的窗口。如果您只想使用主窗口,请跳过调用toplevel 并使用. 而不是.t。 (.t.n 变成了.n,当然。)

      【讨论】:

      • @Yash 在这种情况下,我喜欢给窗口变量。例如。在这种情况下,set w . 然后是 toplevel $wlabel $w.n 等,这样如果您在开始时有 set w .t,您可以在不破坏下面代码的情况下将其更改为 set w .
      • @PeterLewerin 在这里没有得到..n。你在 8.6.4 上吗?我隐约记得它在过去不起作用,我认为这可能已经改变了。
      • 或者通过wm withdraw .隐藏默认窗口
      • 是的@Jerry,这不起作用......它给了我这个错误。启动脚本错误:执行“toplevel $w”时,父窗口名称“”已存在
      • @Yash:除非你想要更多的窗口,否则不要使用toplevel
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多