Python 如何在笔记本小部件的选项卡上切换事件绑定

Python 如何在笔记本小部件的选项卡上切换事件绑定,python,events,tkinter,ttk,Python,Events,Tkinter,Ttk,我有一个基于tkinter和ttk的简单应用程序。我有一个笔记本小部件,用来创建有限数量的标签,标签是一样的。但我需要对每一个做不同的动作。当我按下某个按钮时,将创建一个具有自己名称的选项卡,事件绑定将集中在该选项卡上。如果我选择了使用button press创建的上一个选项卡,那么事件绑定将不会关注它或它的子窗口小部件,这就是我需要解决的问题。我可以在选项卡之间切换事件绑定吗?有什么建议吗? 我正在使用Python2.7查看我对问题的回答以查看工作示例 我使用类MyTab创建具有自己的事件绑定

我有一个基于tkinter和ttk的简单应用程序。我有一个笔记本小部件,用来创建有限数量的标签,标签是一样的。但我需要对每一个做不同的动作。当我按下某个按钮时,将创建一个具有自己名称的选项卡,事件绑定将集中在该选项卡上。如果我选择了使用button press创建的上一个选项卡,那么事件绑定将不会关注它或它的子窗口小部件,这就是我需要解决的问题。我可以在选项卡之间切换事件绑定吗?有什么建议吗? 我正在使用Python2.7

查看我对问题的回答以查看工作示例

我使用类MyTab创建具有自己的事件绑定的新选项卡,因此我可以创建许多相同的选项卡,每个选项卡都使用自己的事件绑定。在示例中,更改选项卡时,选项卡显示不同的消息

您的问题中没有附加代码,因此我无法添加更详细的答案

编辑:

上一个链接+绑定到框架的示例:

直接在MyTab中:self.bind,self.clickFrame在MyTab中调用鼠标左键函数 在应用程序中:tab.bind、self.clickTab在应用程序中使用鼠标右键调用函数 代码:


好的,但类中的绑定是在条目上的。例如,它对框架不起作用。因为tab是框架…我找到了解决方案…因为每个tab都有tabID,我们可以检查哪个选项卡被选中,然后使用..简单的IF语句对其进行绑定。您可以将解决方案作为答案-如果您能简单地使用它,那就太好了实例它可以帮助别人。然后我们可以对您的答案进行投票,您可以将其标记为已接受。顺便说一下:MyTab是框架,因此您可以使用self.bind直接绑定到MyTab内部的框架,或者使用tab.bind在应用程序中绑定到该框架-请参见我答案中的示例。在这个示例中,您还可以看到如何从event-event.widget.name获取框架属性
#!/usr/bin/env python

from Tkinter import *
import tkMessageBox
import ttk

#---------------------------------------------------------------------
class MyTab(Frame):

    def __init__(self, root, name):
        Frame.__init__(self, root)

        self.root = root
        self.name = name

        self.entry = Entry(self)
        self.entry.pack(side=TOP)

        self.entry.bind('<FocusOut>', self.alert)
        self.entry.bind('<Key>', self.printing)

        self.bind("<Button-1>", self.clickFrame)

    #-------------------------------

    def alert(self, event):
        print 'FocusOut event is working for ' + self.name + '  value: ' + self.entry.get()
        #tkMessageBox.showinfo('alert', 'FocusOut event is working for ' + self.name + '  value: ' + self.entry.get())

    #-------------------------------

    def printing(self, event):
        print event.keysym + ' for ' + self.name

    #-------------------------------

    def clickFrame(self, event):
        print "MyTab: click at (" + str(event.x) + ", " + str(event.y) + ') for ' + self.name + " (parent name: " + self.root.tab(CURRENT)['text'] + ")"


#---------------------------------------------------------------------

class Application():

    def __init__(self):

        self.tabs = {'ky':1} 

        self.root = Tk()
        self.root.minsize(300, 300)
        self.root.geometry("1000x700")

        self.notebook = ttk.Notebook(self.root, width=1000, height=650)

#       self.all_tabs = []

        self.addTab('tab1')

        self.button = Button(self.root, text='generate', command=self.start_generating).pack(side=BOTTOM)

        self.notebook.pack(side=TOP)

    #-------------------------------

    def addTab(self, name):
        tab = MyTab(self.notebook, name)
        tab.bind("<Button-3>", self.clickTab)
        self.notebook.add(tab, text="X-"+name)
#       self.all_tabs.append(tab)

    #-------------------------------

    def clickTab(self, event):
        print "Application: click at (" + str(event.x) + ", " + str(event.y) + ') for ' + event.widget.name

        #-------------------------------

    def start_generating(self):
        if self.tabs['ky'] < 4:
            self.tabs['ky'] += 1
            self.addTab('tab'+ str(self.tabs['ky'])) 

    #-------------------------------

    def run(self):
        self.root.mainloop()

#----------------------------------------------------------------------

Application().run()