我注意到Tk的剪贴板命令有时并不真正附加到系统剪贴板。我之前在其他程序(例如tkcon)中注意到了这一点,如果我复制一些文本并尝试将其粘贴到另一个程序(例如记事本),我什么也得不到。有时我需要再次复制才能将文本放入剪贴板。
我目前正在tcler的wiki或see pure console text editor 2上开发自己的文本编辑器(github),我无法让剪贴板在应用程序中运行。
实施看起来很简单:
clipboard clear
clipboard append -- [join $copy_lines \n]
但它不起作用。通过不起作用我的意思是它在正在运行的应用程序中工作但如果我打开了两个应用程序并尝试从第一个应用程序复制并粘贴到第二个应用程序然后它不起作用。
不确定我还需要做什么。从文档看起来它应该可以工作。
答案 0 :(得分:1)
发现问题(至少对我的程序而言)。我的程序在普通的旧tclsh中运行,不希望并在繁忙的循环中等待输入(用after
命令,以减少CPU使用)。因此,它永远不会进入事件循环。事实证明Tk在事件循环中更新剪贴板(可能是在空闲时),因此系统剪贴板永远不会更新(尽管内部数据结构存储复制的文本就好了)。
解决方案是进入事件循环。理想情况下,我重构我的代码以使用fileevents而不是while
循环。为了快速解决问题,我只需在处理用户输入时调用update
。
对于Tk,一般来说,复制的文本似乎随应用程序而消亡。因此,复制的文本在程序运行时可用,但在程序退出时消失。它似乎不会发生在我的Ubuntu机器上。我想我已经有一个守护进程来维护剪贴板。没关系。我现在可以忍受它。