Tcl Tk';s剪贴板命令有时不设置系统剪贴板

Tcl Tk';s剪贴板命令有时不设置系统剪贴板,tcl,tk,Tcl,Tk,我注意到Tk的剪贴板命令有时并不真正附加到系统剪贴板。我以前在其他程序(例如tkcon)中也注意到了这一点,如果我复制一些文本并尝试将其粘贴到另一个程序(例如记事本),我将一无所获。有时我需要再次复制,以便将文本放入剪贴板 我目前正在开发自己的文本编辑器(在tcler的wiki或上),但我无法让剪贴板在应用程序中工作 实现看起来很简单: clipboard clear clipboard append -- [join $copy_lines \n] 但它不起作用。我所说的不起作用是指它在运行

我注意到Tk的剪贴板命令有时并不真正附加到系统剪贴板。我以前在其他程序(例如tkcon)中也注意到了这一点,如果我复制一些文本并尝试将其粘贴到另一个程序(例如记事本),我将一无所获。有时我需要再次复制,以便将文本放入剪贴板

我目前正在开发自己的文本编辑器(在tcler的wiki或上),但我无法让剪贴板在应用程序中工作

实现看起来很简单:

clipboard clear
clipboard append -- [join $copy_lines \n]
但它不起作用。我所说的不起作用是指它在运行的应用程序中起作用,但是如果我打开了两个应用程序,并试图从第一个应用程序复制并粘贴到第二个应用程序中,那么它就不起作用

不知道我还需要做什么。从文档中看,它应该可以工作。

找到了问题(至少对于我的程序)。我的程序运行在普通的旧tclsh中,而不是wish,并在一个繁忙的循环中等待输入(在命令之后插入
,以减少CPU的使用)。因此,它从不进入事件循环。事实证明,Tk会更新事件循环中的剪贴板(可能处于空闲状态),因此系统剪贴板永远不会更新(尽管内部数据结构可以很好地存储复制的文本)

解决方案是进入事件循环。理想情况下,我会重构代码以使用fileevents,而不是
while
循环。为了快速解决问题,每当我处理用户输入时,我都会调用
update

一般来说,对于Tk,复制的文本似乎会随着应用程序而消失。因此,复制的文本在程序运行时可用,但在程序退出时消失。在我的Ubuntu机器上似乎没有发生这种情况。我想我已经运行了一个守护进程来维护剪贴板。没关系。我现在可以接受它。

剪贴板(和其他选择)与事件处理有着紧密的联系。Tk不会直接向脚本公开有问题的事件(它们获得
选择
剪贴板
命令),但这些是真实的事件,因为它们必须来自外部世界。