Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TK笔记本选项卡更改检查_Python_Events_Tk - Fatal编程技术网

Python TK笔记本选项卡更改检查

Python TK笔记本选项卡更改检查,python,events,tk,Python,Events,Tk,这里是新手程序员。我正在构建一个基于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

这里是新手程序员。我正在构建一个基于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())
问题是,当标签被更改时,它不会做任何事情,除了在我打开应用程序后立即调用例程函数,并且不再调用。我只是不知道我做错了什么

有人能指出我犯的错误吗

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

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

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

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

def routine(self, event):
    ...

通过使用(self,event)参数定义回调,并将绑定参数从self.routine()更改为self.routine,工作非常出色。谢谢!
def routine(self, event):
    ...