<command-a> for Text - Tkinter

时间:2017-08-21 10:10:00

标签: python tkinter

我找到了以下代码:

def callback(ev):
    ev.widget.select_range(0, 'end') 

root = Tk()
t = Text(root, height=10, width=40)
t.pack()
t.bind('<Command-a>', callback) //WORKS for ENTRY
root.mainloop()

我基本上试图使 cmd + a Ctrl + a (Windows)在Tkinter工作。

错误(当我给出命令:文本中的cmd-a时):

'Text' object has no attribute 'select_range'

2 个答案:

答案 0 :(得分:2)

代码没问题,只是你在Text小部件上发明了方法。但是,如果查看窗口小部件类(Text)上的绑定,则会定义一些虚拟事件

>>> '<<SelectAll>>' in root.bind_class('Text')
True

因此,在键盘事件的处理程序中,使用event_generate引发SelectAll虚拟事件。

import tkinter as tk
def select_all(ev):
    ev.widget.event_generate('<<SelectAll>>')
root = tk.Tk()
txt = tk.Text(root)
txt.pack()
txt.bind('<Control-A>', select_all)

答案 1 :(得分:1)

Text类没有import tkinter as tk def simulate_contral_a(e): e.widget.tag_add("sel","1.0","end") root = tk.Tk() root.bind_class("Text","<Control-a>", simulate_contral_a) T = tk.Text(root, height=2, width=30) T.pack() T.insert(tk.END, "Press Ctrl+a\nto select me\n") root.mainloop() 函数,这就是您收到该错误消息的原因。但是您可以使用bind_class()将事件绑定到Text类窗口小部件。这是一个肮脏的演示:

$generate = substr(md5(uniqid(mt_rand(), true)), 0, 8);

在上面运行此MCVE,然后按 Ctrl + a 查看其效果:

enter image description here