Select 文本小部件中使用快捷方式的一行文本,Tkinter

Select A Line Of Text Using A Shortcut In Text Widget, Tkinter

我决定开始一个 Tkinter 项目,以更好地了解 Tkinter 并扩展我的知识。我决定做一个记事本,除了遇到一个小问题外,我已经设法做到了。我想在 Tkinter 中制作一个自定义快捷方式,这将帮助我复制长行文本而无需滚动很多。我知道有一些快捷方式,例如使用 Shift 从光标所在的位置进行复制,但我想做的是制作我自己的自定义快捷方式。比方说,按 Ctrl + Q 将复制光标所在的整行或类似内容。如果可能的话,能够 select 当前行而不使用另一个自定义快捷方式复制它也是一个不错的功能。例如,参见图片:
我对这个问题做了很多研究,但我还没有找到任何有用的信息。我不想使用 windows 中已经存在的快捷方式,因为我想创建自己的自定义快捷方式。问题不在于我如何使用绑定功能,问题在于我将如何实际制作一个函数,该函数将 select 该行并复制它。
谢谢! :)

非常简单,你只需要使用Text widget indices,它们提供了很好的功能。在这种情况下最有用的是 'insert''linestart' 以及 'lineend' 因为它们很容易允许 select 光标所在的整行。剩下的就很简单了:

import tkinter as tk


def copy_line(event=None):
    data = text.get('insert linestart', 'insert lineend')
    root.clipboard_clear()
    root.clipboard_append(data)


def select_line(event=None):
    # `sel` is a special tag name that represents the current selection if any
    text.tag_add('sel', 'insert linestart', 'insert lineend')


root = tk.Tk()

text = tk.Text(root)
text.pack()

text.bind('<Control-q>', copy_line)
text.bind('<Control-e>', select_line)

root.mainloop()