我发现了一个在tkinter
中看起来像是bug的行为。
如果你运行以下最小化代码复制:
import tkinter, tkinter.simpledialog, tkinter.scrolledtext
root = tkinter.Tk('test')
text = tkinter.scrolledtext.ScrolledText(master=root, wrap='none')
text.pack(side="top", fill="both", expand=True, padx=0, pady=0)
text.insert(tkinter.END, 'abc\ndef\nghi\nijk')
root.mainloop()
然后:
- 在
scrolledtext
组件中选择一行,例如选择“ghi”这一行, - 使用 CTRL+C 复制该行内容
- 不进行任何其他操作并关闭应用程序
然后在任何其他 Windows 应用程序中粘贴它(CTRL+V),但发现无法粘贴。为什么呢?
如何解决这个问题?
注意:预期的行为是使用 CTRL+C 复制的文本应该会保留在剪贴板中,即使应用程序已经关闭。这是许多 Windows 软件的默认行为。以下是在 notepad.exe
中的示例:
注意:这与以下问题有关:
tkinter
窗口,所有由tkinter
添加的剪贴板项目都会在我的电脑上被删除。另外,text.focus()
的作用是什么?你是不是想说text.focus_set()
? - TheLizzard.focus()
部分。 更重要的是,例如,即使notepad.exe
已关闭,任何复制的文本都将保留,即使notepad.exe
已关闭。 示例:https://imgur.com/li7UvYw 这是期望的行为。 在这里使用tkinter时,它不起作用。 有什么想法如何解决这个问题? - Basjtkinter
的工作方式。我知道这很烦人,也不知道为什么会这样。你可以绑定到Control-c
并使用clipboard
库来复制数据。即使tkinter
窗口关闭,它也应该将数据实际复制到剪贴板中。 - TheLizzardr.after(100, r.destroy); r.mainloop()
让 Tkinter 在退出时执行复制到系统剪贴板的代码?我还没有尝试过,但这可能是一个解决方法。它对你有用吗? - Basj