Tcl / tk - 如何使线程中的yesno messageBox可见

时间:2016-07-07 17:28:24

标签: tcl tk

我创建了一个简单的线程来连续显示一个消息框,直到用户不想进行某些操作。以下是代码:

thread::create { while [tk_messageBox -message "Do you want to Exit?!!" -type yesno] {
    doSomething
}}

但是虽然创建了线程但是没有显示消息框。 我怎么能真正看到这些消息框?

1 个答案:

答案 0 :(得分:1)

你需要让Tk出现在线程中;默认情况下,只有Thread包存在于从属线程中:

thread::create {
    package require Tk
    while [tk_messageBox -message "Do you want to Exit?!!" -type yesno] {
        doSomething
    }
}

此外,您需要在代码中解决许多其他问题。

  1. 始终 while的条件置于{大括号}中。如果没有这个,表达式的动态部分将只被评估一次,这实际上不是你想要的while
  2. 确保您的线程thread::wait,因为这样可以改进进程和线程管理。您的消息框循环需要完全重写。
  3. 这可能导致此代码:

    thread::create {
        package require Tk
    
        proc periodicallyMaybeDoSomething {} {
            if {[tk_messageBox -message "Do you want to Exit?!!" -type yesno]} {
                thread::exit
            }
            doSomething
            # pick a better delay maybe?
            after 1 periodicallyMaybeDoSomething
        }
        after 1 periodicallyMaybeDoSomething
    
        thread::wait
    }
    

    如果您使用的是8.6,则可以使用协同程序使代码更加优雅。