【问题标题】:(Tcl/Tk) Creating a persistent options window?(Tcl/Tk) 创建一个持久的选项窗口?
【发布时间】:2015-01-21 16:25:51
【问题描述】:

堆栈溢出!

我的问题分为两部分;第一部分是我不知道这个概念实际上叫什么,这就是为什么我在任何地方都很难找到它!第二部分是我不确定它将如何在 Tcl/Tk 中实现。来了……

那么,在返回主 GUI 之前,您必须通过单击“取消”或“确定”来完成您在该窗口中所做的事情,如何创建这些持久的“设置”顶层之一?我知道我可以给一个窗口 topmost 属性和 wm attributes 这将使窗口保持在其他窗口的顶部,但这并不是我想要的。

【问题讨论】:

  • 您要查找的短语是“模态对话框”。
  • 啊,是的!就是这样!谢谢你。抱歉这个愚蠢的问题,它一直困扰着我一整天。我必须做一个模态对话,我什至不知道它叫那个T_T

标签: user-interface dialog tcl tk


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多