Python中Tkinter的Checkbutton如何控制对应的Text文本框组件?
运行原理解释
你观察到的多组组件互不干扰、复选框总能对应到正确文本框的效果,核心是Python的**闭包(Closure)**特性实现的,具体逻辑如下:
- 每次点击「创建复选框和文本框」按钮时,都会触发一次
create_boxes()函数的独立调用,每次调用都会生成一个专属的函数运行上下文:- 首先定义嵌套函数
disable_text() - 实例化当前批次专属的
Checkbutton和Text组件,赋值给当前上下文的局部变量checkbox、textbox - 将当前上下文下的
disable_text函数绑定给同上下文的checkbox的command触发属性
- 首先定义嵌套函数
- 作为嵌套函数的
disable_text会自动捕获它定义时所在的create_boxes调用上下文的所有局部变量,也就是和它同批次生成的textbox实例。而且每次create_boxes调用生成的上下文完全独立,不同上下文里的textbox、disable_text都是互不影响的独立对象。 - 当你点击某个复选框时,触发的是和它同批次绑定的
disable_text函数,这个函数访问的textbox自然就是对应批次的文本框,不会串到其他组的组件上。
补充说明:你的现有实现没有用到
Checkbutton常用的variable绑定变量来判断勾选状态,而是直接切换文本框的state属性实现互斥效果,逻辑上是可行的。如果后续需要读取复选框的勾选状态,也可以给每个Checkbutton绑定一个独立的BooleanVar变量,同样通过闭包捕获即可。
内容的提问来源于stack exchange,提问作者Ye_kya
相关产品推荐
相关产品推荐

