0

我在 tcl tk 中有一个名为 .dsm 的主窗口。此主窗口有两个笔记本选项卡 f1 和 f2。当用户单击第二个选项卡上的“运行”按钮时,我想激活第一个选项卡并要求用户在继续之前验证输入。我的问题是,当弹出要求用户检查输入的消息框时,.dsm 窗口被最小化。如何防止这种情况,以便用户可以同时看到消息框和主窗口?我尝试了“raise”,但随后消息框消失在视线之外......

# activate the first notebook tab "f1"
.dsm.nb select .dsm.nb.f1
# Ask the user
set answer [tk_messageBox \
        -message "Are these the setting you want to use for the batch run?" \
        -type okcancel]
4

1 回答 1

1

您描述的行为在任何默认配置中都不是 Tk 的功能;当您在任何平台上使用任何标准对话框时,它不会最小化其他窗口。可能可以编写一个脚本来通过跟踪和滥用事件来完成它,<Focus><Leave><Deactivate>,但它会很丑陋且不可移植。以及糟糕的用户界面设计。(如果有人想尝试这样做,请不要这样做

您可以通过指定-parent选项是您不想消失的窗口(它将消息框标记为该主窗口的帮助窗口),但也可以产生视觉效果。否则,您可能必须弄清楚什么事件处理程序在消息框上接收并以意想不到的方式响应。它不应该是任何小部件类处理程序——它们不会做这种事情——但你可能需要进行大量搜索。需要特别注意的是几个事件处理程序之间的交互,其中一些是在不同的绑定标签级别定义的。(除了小部件和包含顶层之外,您可能永远不想在任何级别定义行为;编写真正通用的控制器脚本非常困难,而使它们适用于特定的小部件或窗口则要简单得多。)

于 2013-10-15T12:56:48.373 回答