Python TK Notebook 选项卡更改检查

Ali*_*uga 7 python events tk-toolkit

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

我有一个主窗口,其中有几个内容,包括两个选项卡:

    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())
Run Code Online (Sandbox Code Playgroud)

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

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

问题是,当选项卡更改时,它不会执行任何操作,除了在我打开应用程序后立即调用例程函数,并且不再执行。我只是不明白我做错了什么。

有人能指出我犯的错误吗?

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

nBook.bind("<<NotebookTabChanged>>", self.xbRoutine())
Run Code Online (Sandbox Code Playgroud)

sci*_*ics 5

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

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

def routine(self, event):
    ...
Run Code Online (Sandbox Code Playgroud)