(吨/吨)创建持久选项窗口



Stackoverflow!

我在这里的问题是两部分;第一部分是我不知道这个概念实际上叫什么,这就是为什么我在任何地方搜索它都非常困难!第二部分是我不确定它将如何在 Tcl/Tk 中实现。

那么,如何使这些持久的"设置"顶级之一,您必须通过单击"取消"或"确定"来完成在该窗口中执行的操作,然后才能返回主GUI?我知道我可以给一个窗口topmost属性,wm attributes这将使窗口保持在另一个窗口的顶部,但这不是我想要的。

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

抓取只能在映射的窗口上设置。在 Unix 上,tkwait visible 命令非常适合让事情暂时暂停,直到窗口实际映射。在Windows和OSX上,它实际上不起作用,尽管适当的after可以有很大帮助,就像第一次观看处理<Expose>事件一样(这是对话框的实际绘制被推迟到的内容)。

您可能还想考虑使用tkwait variable(又名vwait),以便可以从代码中以阻塞方式使用对话框;您只需从OKCancel按钮设置(全局!)变量。这不是必需的,但这是一种相当常见的模式。如果这样做,请确保如果用户只是通过单击对话框的X窗口修饰来关闭对话框,您仍会终止等待。<Destroy>事件对此很有用(尽管要小心在任何顶层捕获<Destroy>;它还会检测子小部件的破坏)。

最后,开始研究如何做到这一点的合理位置是Tk自己的tk_dialog命令。这只是一个过程,因此您可以轻松阅读源代码。或者您可以在线查看(特别是从第 148 行开始检查)。它调用的过程都在tk.tcl中...

最新更新