CTRL + a选择所有条目小部件tkinter python

时间:2017-01-05 04:42:51

标签: python user-interface tkinter ctrl tkinter-entry

如何在Entry widget tkinter python中使用click + drug left mouse选择所有文本块。

 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)

2 个答案:

答案 0 :(得分:6)

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期望不带()的文件名和参数(回调)。但bind也始终使用一个参数event执行此函数,该参数允许访问执行此函数event.widget的条目,因此您可以将它与许多不同的条目一起使用。最后Entry.get()来获取所有文字。

修改

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

编辑:

在找不到与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()

答案 1 :(得分:0)

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

Python tkinter: stopping event propagation in text widgets tags开始,我们需要停止事件传播。返回“ 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()