我在tcl tk中有一个名为.dsm的主窗口。该主窗口有两个笔记本标签f1和f2。当用户单击第二个选项卡上的“运行”按钮时,我想激活第一个选项卡并要求用户在继续之前验证输入。我的问题是,当要求用户检查输入的消息框弹出时,.dsm窗口被最小化。如何防止这种情况,以便用户可以看到消息框和主窗口?我尝试了“加注”,但随后消息框消失了......
# 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]
答案 0 :(得分:0)
您描述的行为不是任何默认配置中Tk的功能;当您在任何平台上使用任何标准对话框时,它不会最小化其他窗口。 可能可以通过跟踪和滥用<Focus>
,<Leave>
或<Deactivate>
等事件来编写脚本,但这样做会很难看和非便携式。而糟糕的用户界面设计。 (如果有人想要尝试这样做, 不要这样做! )
您可以通过将-parent
选项指定为您不想消失的窗口(这将消息框标记为该主窗口的辅助窗口)来修复问题,但这可以也有视觉效果。否则,您可能必须弄清楚消息框中正在拾取的事件处理程序并以意外方式响应。它不应该是任何窗口小部件类处理程序 - 它们不会执行此类操作 - 但您可能需要进行大量搜索。需要特别注意的是几个事件处理程序之间的交互,其中一些事件处理程序在不同的绑定标记级别定义。 (您可能不希望在除widget和contains-toplevel之外的任何级别定义行为;编写真正的通用控制器脚本非常困难,而使它们适用于特定的窗口小部件或窗口要简单得多。)