CTRL + a 选择条目小部件 tkinter python 中的所有内容

问题描述 投票:0回答:2

如何在 Entry 小部件 tkinter python 中使用单击+药物左键选择所有文本,例如块。

 e1 = tk.Entry(bop, width = 50, font = "Helvetica 13")
 e1.grid(row=1,column=1, padx=15, pady=15)
 e1.bind_class("Entry","<Control-a>", select_all(e1))

这是

select_all()
的功能:

def select_all(e):
   a = e.select_range(0,tk.END)
python user-interface tkinter ctrl tkinter-entry
2个回答
11
投票

SO 上有很多类似的例子

import tkinter as tk

def callback(event):
    print('e.get():', e.get())
    # or more universal
    print('event.widget.get():', event.widget.get())
    # select text after 50ms
    root.after(50, select_all, event.widget)
    
def select_all(widget):
    # select text
    widget.select_range(0, 'end')
    # move cursor to the end
    widget.icursor('end')

root = tk.Tk()

e = tk.Entry(root)
e.pack()
e.bind('<Control-a>', callback)

root.mainloop()

bind
需要不带
()
且不带参数的函数名称(所谓的
"callback"
)。但是
bind
也始终使用一个参数
event
执行此函数,该参数可以访问执行此函数
event.widget
的条目,因此您可以将其与许多不同的条目一起使用。最后
Entry
.get()
来获取所有文本。


编辑:

因为释放按键后

<Control-a>
选择被删除,所以我在50ms后使用
after()
执行选择。它选择所有文本(但它将光标移动到开头)并将光标移动到末尾。 (见上面的代码)


编辑:

之前我找不到与

Release
的正确组合,但它必须是
<Control-KeyRelease-a>
,现在不需要
after()

import tkinter as tk

def callback(event):
    print('e.get():', e.get())
    # or more universal
    print('event.widget.get():', event.widget.get())

    # select text
    event.widget.select_range(0, 'end')
    # move cursor to the end
    event.widget.icursor('end')

root = tk.Tk()

e = tk.Entry(root)
e.pack()
e.bind('<Control-KeyRelease-a>', callback)

root.mainloop()

6
投票

furas 的答案很好,但仍然不能完美模拟 Windows Ctrl+A 行为。该事件仅在释放“a”键后触发,但该事件应在按下“a”键时触发。

取自Python tkinter:停止文本小部件标签中的事件传播,停止事件传播是我们所需要的。返回“break”会停止任何破坏 ctrl+a 行为的后续事件,并且还允许我们缩短与“

的绑定
def callback(event):

    # select text
    event.widget.select_range(0, 'end')
    # move cursor to the end
    event.widget.icursor('end')
    #stop propagation
    return 'break'

root = tk.Tk()

e = tk.Entry(root)
e.pack()
e.bind('<Control-a>', callback)

root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.