当我按一个键时,我只需知道如何获取我的两个文本框之一的名称。
我有两个文本框,一个名为'Text1',第二个名为'Text2'。我希望当我把光标放在第一个上时,我按下一个键(如p)并打印'你将光标放在Text1上!'当我将光标放在第二个文本框上时也一样。 有可能的?
答案 0 :(得分:1)
我们可以通过绑定来获得您正在寻找的行为。
我们需要使用框架来保存每个文本小部件,然后将<Enter>
绑定到每个框架,然后将命令发送到方法以将焦点设置在鼠标当前所在的框架上。
我们还将字母p
绑定到每个将使用lambda print语句打印出该框架内文本框名称的框架。
这是一个简单的示例,您可以将鼠标悬停在每个文本框上,如果按p
,则无需单击鼠标,您将在控制台中看到文本框的名称。
import tkinter as tk
root = tk.Tk()
def set_focus(x):
x.focus_force()
text1_frame = tk.Frame(root)
text1_frame.pack()
text1_frame.bind("p", lambda x: print("text1"))
text1_frame.bind("<Enter>", lambda x: set_focus(text1_frame))
text2_frame = tk.Frame(root)
text2_frame.pack()
text2_frame.bind("p", lambda x: print("text2"))
text2_frame.bind("<Enter>", lambda x: set_focus(text2_frame))
text1 = tk.Text(text1_frame, height = 4, width = 10)
text1.pack()
text2 = tk.Text(text2_frame, height = 4, width = 10)
text2.pack()
root.mainloop()
一种稍微不同的方式是不操纵焦点,只是用鼠标的当前位置更新变量,并将p
绑定到root并调用打印函数。
import tkinter as tk
root = tk.Tk()
m_location = "root"
def mouse_location(x):
global m_location
m_location = x
text1_frame = tk.Frame(root)
text1_frame.pack()
text1_frame.bind("<Enter>", lambda x: mouse_location("text1"))
text1_frame.bind("<Leave>", lambda x: mouse_location("root"))
text2_frame = tk.Frame(root)
text2_frame.pack()
text2_frame.bind("<Enter>", lambda x: mouse_location("text2"))
text2_frame.bind("<Leave>", lambda x: mouse_location("root"))
text1 = tk.Text(text1_frame, height = 4, width = 10)
text1.pack()
text2 = tk.Text(text2_frame, height = 4, width = 10)
text2.pack()
def print_if(event = None):
global m_location
print(m_location)
root.bind("p", print_if)
root.mainloop()