这个想法显示在我的光标所在的标签上(行.列)是的。它与.index(INSERT)配合得很好,但如果我用文本绑定鼠标右键,它将返回上一个光标位置,而不是当前位置。 似乎回调是在事件之后执行的?你知道吗
from tkinter import Tk, Text, Frame, Label, StringVar, constants, END, INSERT
EXPL_TEXT = "I know that dress is karma. Perfume regret\nYou got me thinking bout"
class App(Frame):
def __init__(self,master):
Frame.__init__(self,master)
self.pack()
self.var = StringVar()
self.init_widgets()
def init_widgets(self):
self.text = Text(self)
self.text.bind('<Button-1>',self.callback_index)
self.text.pack()
self.text.insert(END,EXPL_TEXT)
self.label = Label(self, textvariable=self.var)
self.label.pack()
def callback_index(self,event):
x = self.text.index(INSERT)
self.var.set(x)
if __name__ == '__main__':
root = Tk()
app = App(root)
root.mainloop()
我相信您看到的问题是,当您单击鼠标时,事件触发以读取
INSERT
。问题是,在您提起鼠标之前,该位置仍将具有上一次插入的值。因此,为了让您在事件完成后获得更新,我们可以使用after()
等待事件完成,然后设置self.var
的值。你知道吗将
callback_index
方法更改为:我们要做的是告诉python在设定的时间之后安排一些事情发生。我相信(如果我错了请纠正我),因为一个事件正在进行中,它会等到该事件完成后才执行
after()
方法中的操作。你知道吗我们使用
lambda
来创建一个匿名函数来更新self.var
变量,所有这些都应该按预期工作。你知道吗相关问题 更多 >
编程相关推荐