如何知道tkinter中对象的名称

时间:2017-08-23 21:19:55

标签: python select tkinter

当我按一个键时,我只需知道如何获取我的两个文本框之一的名称。

我有两个文本框,一个名为'Text1',第二个名为'Text2'。我希望当我把光标放在第一个上时,我按下一个键(如p)并打印'你将光标放在Text1上!'当我将光标放在第二个文本框上时也一样。 有可能的?

1 个答案:

答案 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()