我只需要知道当我按下一个键时如何获取两个文本框之一的名称。
我有两个文本框,一个名为“Text1”,第二个名为“Text2”。我希望当我将光标放在第一个上时,我按一个键(如 p)并打印“您的光标位于 Text1 上!”当我将光标放在第二个文本框上时也是如此。 有可能的?
最佳答案
我们可以使用绑定(bind)来获得您正在寻找的行为类型。
我们需要使用框架来保存每个文本小部件,然后绑定(bind) <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()
不操纵焦点的稍微不同的方法是仅使用鼠标的当前位置更新变量并绑定(bind) 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()
关于python - 如何知道tkinter中对象的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45849440/