CTRL+a select all-in-entry小部件tkinter python

2024-10-02 22:23:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我如何在条目小部件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()的函数:

^{pr2}$

Tags: 文本部件tkinter条目allwidthleftselect
2条回答

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

Python tkinter: stopping event propagation 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()

类似的例子太多了

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有{}来获取所有文本。在


编辑:

因为释放键后<Control-a>选择被移除,所以我使用after()在50ms后执行选择,它选择所有文本(但它将光标移到开始处)并将光标移到末尾。(见上述代码)


编辑:

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

^{pr2}$

相关问题 更多 >