Python如何正确使用绑定?

2024-04-26 03:27:50 发布

您现在位置:Python中文网/ 问答频道 /正文

这个想法显示在我的光标所在的标签上(行.列)是的。它与.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()

Tags: textselfindexinitvardefrootframe
1条回答
网友
1楼 · 发布于 2024-04-26 03:27:50

我相信您看到的问题是,当您单击鼠标时,事件触发以读取INSERT。问题是,在您提起鼠标之前,该位置仍将具有上一次插入的值。因此,为了让您在事件完成后获得更新,我们可以使用after()等待事件完成,然后设置self.var的值。你知道吗

callback_index方法更改为:

def callback_index(self,event):
    root.after(0, lambda: self.var.set(self.text.index(INSERT)))

我们要做的是告诉python在设定的时间之后安排一些事情发生。我相信(如果我错了请纠正我),因为一个事件正在进行中,它会等到该事件完成后才执行after()方法中的操作。你知道吗

我们使用lambda来创建一个匿名函数来更新self.var变量,所有这些都应该按预期工作。你知道吗

相关问题 更多 >