hal*_*adi 1 python user-interface tkinter ctrl tkinter-entry
如何在Entry小部件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))
Run Code Online (Sandbox Code Playgroud)
这是功能select_all()
:
def select_all(e):
a = e.select_range(0,tk.END)
Run Code Online (Sandbox Code Playgroud)
在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()
Run Code Online (Sandbox Code Playgroud)
bind
期望文件名不带()
和参数(回调).但是也bind
总是使用一个参数执行此函数,该参数event
允许访问执行此函数的条目,event.widget
因此您可以将它与许多不同的条目一起使用.最后Entry
有.get()
获得所有文本.
编辑:
因为释放后键<Control-a>
选择被删除所以我用after()
50分钟后执行选择.它选择所有文本(但它将光标移动到开头)并将光标移动到结尾.(见上面的代码)
编辑:
在我找不到正确的组合之前,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()
Run Code Online (Sandbox Code Playgroud)
小智 6
Furas 的答案很好,但仍然不能完美模拟 Windows Ctrl+A 行为。该事件仅在释放“a”键后触发,但该事件应在按下“a”键时触发。
取自Python tkinter:stopping event spread in text widgets Tags,停止事件传播就是我们所需要的。返回“break”会停止任何破坏 ctrl+a 行为的后续事件,并且还允许我们缩短与“<Control-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()
Run Code Online (Sandbox Code Playgroud)