You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多页面Tkinter应用中如何调用tkraise()切换其他类内存储的Frame

根因分析

该问题由Python的闭包迟绑定特性导致:在for循环内部定义lambda函数时,如果直接引用循环变量,函数不会在定义阶段捕获变量的当前值,只会在实际被调用时读取变量的最终值。
你提供的代码中,侧边栏按钮的lambda绑定逻辑跑完6次循环后,循环变量ids的最终值为5,对应页面列表的最后一项SyncPage,因此所有按钮点击后都会跳转到同步页面。

修复方案

给lambda函数添加默认参数即可解决问题,默认参数会在函数定义阶段完成求值,每次循环迭代都会将当前ids的取值存入对应lambda的默认参数中,保证每个按钮绑定的页面索引正确。

修改SideBar类中按钮的command参数:
原错误写法:

command=lambda: ctl.show_page(page_name[ids])

修复后写法:

command=lambda ids=ids: ctl.show_page(page_name[ids])

内容的提问来源于stack exchange,提问作者Corecaps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:45:05