TCLTK块输入,同时在r中处理

  • 本文关键字:处理 TCLTK tk-toolkit
  • 更新时间 :
  • 英文 :


RGTK2阻塞用户输入,同时处理其解释如何使用RGTK2阻塞用户输入,但我不知道如何将该代码添加到我的GUI代码中,我使用tcltk。我想要的和RGTK2一样,在处理时阻塞用户输入,但使用tcltk2

我使用这段代码运行按钮"过滤器集群"和命令功能是过滤器(函数做某事)

tkpack(tkbutton(f4, text='Filter Cluster', command=filter), side='left',padx= 5, pady = 20)

tcltk中,您将在无响应的窗口上使用tkgrab.set,在对<Key>事件有绑定的窗口上使用tkfocus,以防止进一步处理。一个不显眼的tkframe对于这类事情来说是很好的——将它的大小设置为1×1,但要确保它在屏幕上——因为它没有默认的行为来阻碍。(您还需要进行一些修饰性更改,例如将小部件标记为禁用并将光标设置为watch。)在8.6中,有tk busy(调用tcl("tk","busy",…),因为Tcl的tk命令似乎没有一个方便的映射),这使得这一切变得更容易(尽管我不知道它是否/如何映射到R中)。释放抓取窗口的最简单方法是销毁它,但你也可以tkgrab.release

不要使用全局抓取。 它们很容易出错,会给你带来很多痛苦。(如果您坚持,强烈建议您取消鼠标活动,并非常彻底地进行测试。锁定显示器可不是一种愉快的体验!)默认的本地抓取不是问题,因为你可以切换到另一个程序,并在必要时杀死卡住的应用程序。

Tk(和Tcl)的完整文档在线;根据您正在使用的库的版本选择文档的版本,可能是8.5,希望是8.6(因为它有一些不错的额外功能),可能是8.4(老派!)正如tcltk的R文档所述,您可以通过tcl(…)调用Tcl或Tk中的任何内容,将命令名和参数的单词作为许多字符串传入(Tcl是一种天然的var-args语言,并且广泛使用这种语言)。默认便利映射的有限范围不应该对您造成实质性的阻碍。


一般性建议,与你的问题不太密切相关

大多数Tk程序员在编写代码时尽量不以这种方式锁定用户。如果您可以保持GUI响应性,而不是暂时禁用(通过大多数响应性小部件上的state选项)可能在持续时间内触发重入问题的部分,您将获得更好的用户体验。(长时间运行的处理也可能是事件驱动的,或者放在另一个线程中,甚至委托给子流程。请记住,Tk GUI是严格的单线程-实现非常深入地假设了这一点,尽管可以在不同的线程中拥有完全独立的应用程序,如果要正确工作相当麻烦-所以您必须回到GUI线程来更新GUI中的任何内容

相关内容

  • 没有找到相关文章

最新更新