如何知道 tkinter 中对象的名称



我只需要知道如何在按下某个键时获取两个文本框之一的名称。

我有两个文本框,一个名为"Text1",第二个名为"Text2"。我希望当我将光标放在第一个上时,我按下一个键(如 p(,它会显示"您的光标在 Text1 上!当我将光标放在第二个文本框上时也是如此。 可能吗?

我们可以绑定以获得您正在寻找的行为类型。

我们需要使用框架来容纳每个文本小部件,然后将<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() 

最新更新