如何覆盖tkinter基本小部件事件回调?

时间:2017-07-19 00:27:44

标签: python-3.x tkinter

我正在继承Tkinter Text小部件以提供一些自定义。

class CustomText(Text):
    def __init__(self, *args, **kwargs):
        Text.__init__(self, *args, **kwargs)
        self.bind("<Control-v>", lambda event: self.paste())

    def paste(self):
        self.see('insert')
        return "break"

我想覆盖<Control-v>(粘贴)事件处理程序,并使用我自己的实现扩展基本操作。

继承并创建我自己的<Control-v>事件回调非常简单,但我没有设法执行基本回调。

我试过

def paste(self):    # -1-
    super().event_generate('<Control-v')
    self.see('insert')
    return "break"

def paste(self):    # -2-
    super.event_generate('<Control-v')
    self.see('insert')
    return "break"    

def paste(self):    # -3-
    self.see('insert')

在-1-我试图使用super()来调用基类方法 - 不起作用

在-2-我尝试使用super来调用基类方法 - 不起作用

在-3-我试图让tkinter运行基类,不起作用 - 基于bindtags,我的代码将首先运行,然后Text方法将运行(因此不给我的意图)

如何调用基类方法(覆盖并扩展<Control-v>行为)?

1 个答案:

答案 0 :(得分:1)

我不知道有什么方法可以直接做你要求的,但你可以通过after()伪造它:

def paste(self):
    self.after(1, lambda: self.see('insert'))