Python TK Notebook 选项卡更改检查

Python TK Notebook tab change check

这里是新手程序员。我正在构建一个基于 tk 的桌面应用程序,运行 遇到一个问题:

我有一个主 window,里面有几个东西,包括两个标签:

    global nBook
    nBook = ttk.Notebook(self, name="book")
    nBook.place(x=300,y=400)
    frameOne = ttk.Frame(nBook, width=100, height=100)
    frameTwo = ttk.Frame(nBook, width=100, height=100)
    nBook.add(frameOne, text='T1')
    nBook.add(frameTwo, text='T2')
    frameOne.bind("<<NotebookTabChanged>>", self.routine())
    frameTwo.bind("<<NotebookTabChanged>>", self.routine())

routine() 是一个函数,每次选择 T2 时都应该执行检查

def routine(self):
    if str(nBook.index(nBook.select())) == "2":
        # Do stuff
    else:
        pass

问题是,当我打开应用程序时,除了调用例程函数,而不再重新调用例程函数外,它不执行任何操作。我只是不知道我做错了什么。

谁能指出我犯的错误?

编辑:如果我尝试同样的问题

nBook.bind("<<NotebookTabChanged>>", self.xbRoutine())

错误来自事件绑定语句:当使用self.routine()时,回调是在执行bind语句时调用的,而不是在触发事件时调用的。为了获得正确的行为,bind 的第二个参数应该是函数的名称而不是对该函数的调用,因此只需删除括号即可。

另一个错误:当使用 bind 时,回调函数应该有第一个参数(传统上称为 event)存储事件参数。所以你应该将你的回调定义为:

def routine(self, event):
    ...

我遇到了同样的问题。 @sciroccorics 给出的答案并不完整。 你绑定的不是tab本身,而是notebook

所以,应该是

nBook.bind("<<NotebookTabChanged>>", self.xbRoutine)