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)
该错误来自事件绑定语句:当使用self.routine()回调时,会在bind语句执行时调用,而不是在事件触发时调用。为了获得正确的行为, 的第二个参数bind应该是函数的名称而不是对此函数的调用,因此只需删除括号即可。
另一个错误:当使用 时bind,回调函数应该有第一个参数(传统上称为event)存储事件参数。所以你应该将你的回调定义为:
def routine(self, event):
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4805 次 |
| 最近记录: |