我找到了以下代码:
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'
答案 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 查看其效果: