(Tcl / Tk)创建持久性选项窗口?

时间:2015-01-21 16:25:52

标签: user-interface dialog tcl tk

#1!

我的问题是两部分;第一部分是我不知道这个概念实际上被称为是什么,这就是为什么我在任何地方都难以置信地寻找它的原因!第二部分是我不确定如何在Tcl / Tk中实现它。这就是......

那么如何制作其中一个持久的"设置"你必须通过点击"取消"来完成您在该窗口中所做的事情。或者"确定"在你可以返回主GUI之前?我知道我可以使用topmostwm attributes属性一个窗口,这将使窗口保持在其他窗口的顶部,但这并不是我想要的。

1 个答案:

答案 0 :(得分:1)

要在Tk中创建模态对话框,您需要设置grab,以便将鼠标事件定向到对话框窗口。您可能还需要确保focus位于对话框中的某个位置。 (不要使用全局抓取 - grab -global - 除非你知道你正在做什么并且非常小心;你可以锁定你的整个GUI与用户的互动。你不应该使用全局抓取来进行模态对话。)

Grabs只能在映射的窗口上设置。在Unix上,tkwait visible命令非常适合暂时暂停,直到窗口实际映射为止。在Windows和OSX上,尽管适当的after可以提供很多帮助,但它并没有真正起作用,因为第一次处理<Expose>事件时可以看到(这是实际< / em>对话框的绘制被推迟到)。

您可能还想查看使用tkwait variable(a.k.a。,vwait),以便您可以在代码中以阻止方式使用该对话框;您只需从OKCancel按钮设置(global!)变量即可。这没有必要,但这是一个相当普遍的模式。如果这样做,请确保如果用户只是通过单击其X窗口装饰关闭对话框,您仍然会终止等待。 <Destroy>事件对此很有用(尽管在任何顶层上捕获<Destroy>都要小心;它还会检测子窗口小部件的破坏)。

最后,开始查看如何执行此操作的合理位置是Tk自己的tk_dialog命令。这只是一个程序,因此您可以轻松阅读源代码。或者您可以查看online(特别是从148行开始查看)。它调用的程序都在tk.tcl ...