#1!
我的问题是两部分;第一部分是我不知道这个概念实际上被称为是什么,这就是为什么我在任何地方都难以置信地寻找它的原因!第二部分是我不确定如何在Tcl / Tk中实现它。这就是......
那么如何制作其中一个持久的"设置"你必须通过点击"取消"来完成您在该窗口中所做的事情。或者"确定"在你可以返回主GUI之前?我知道我可以使用topmost
给wm attributes
属性一个窗口,这将使窗口保持在其他窗口的顶部,但这并不是我想要的。
答案 0 :(得分:1)
要在Tk中创建模态对话框,您需要设置grab
,以便将鼠标事件定向到对话框窗口。您可能还需要确保focus
位于对话框中的某个位置。 (不要使用全局抓取 - grab -global
- 除非你知道你正在做什么并且非常小心;你可以锁定你的整个GUI与用户的互动。你不应该使用全局抓取来进行模态对话。)
Grabs只能在映射的窗口上设置。在Unix上,tkwait visible
命令非常适合暂时暂停,直到窗口实际映射为止。在Windows和OSX上,尽管适当的after
可以提供很多帮助,但它并没有真正起作用,因为第一次处理<Expose>
事件时可以看到(这是实际< / em>对话框的绘制被推迟到)。
您可能还想查看使用tkwait variable
(a.k.a。,vwait
),以便您可以在代码中以阻止方式使用该对话框;您只需从OK
和Cancel
按钮设置(global!)变量即可。这没有必要,但这是一个相当普遍的模式。如果这样做,请确保如果用户只是通过单击其X
窗口装饰关闭对话框,您仍然会终止等待。 <Destroy>
事件对此很有用(尽管在任何顶层上捕获<Destroy>
都要小心;它还会检测子窗口小部件的破坏)。
最后,开始查看如何执行此操作的合理位置是Tk自己的tk_dialog
命令。这只是一个程序,因此您可以轻松阅读源代码。或者您可以查看online(特别是从148行开始查看)。它调用的程序都在tk.tcl ...