首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Tkinter,试图在循环中生成Checkbutton

Tkinter,试图在循环中生成Checkbutton
EN

Stack Overflow用户
提问于 2014-02-06 15:34:24
回答 1查看 3.3K关注 0票数 0

我试图在循环中生成独立的Checkbutton,但是具有相同名称的Checkbutton一起工作。我不知道我的错误在哪里..。

代码语言:javascript
复制
#!/usr/bin/env python
#-*-coding:utf-8-*-
import os
from Tkinter import * 
import ttk 

def checkBoxText(st):
    if st == 0:
        st="Disabled"
    if st == 1:
        st="Enabled"
    return st

root = Tk()

winSt={1:1,2:1,3:0,4:0}
cbTexts={}
cbVariables={}
cb={}
cb_x={ "1":"0.0", "2":"0.0", "3":"0.6", "4":"0.6" }
cb_y={"1": "0.1", "2": "0.8", "3": "0.1", "4": "0.8"}
for i in sorted(winSt.keys()):
    cbTexts[i] = StringVar()
    cbTexts[i].set(checkBoxText(winSt[i]))
    cbVariables[i] = IntVar()
    cbVariables[i].set(winSt[i])

    cb[i] = Checkbutton(root, text=cbTexts[i].get(), variable=cbVariables[i].get())
    cb[i].place(relx=cb_x[str(i)], rely=cb_y[str(i)], relheight=0.1,relwidth=0.4)
mainloop()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-11 17:28:05

问题就在这一行上:

代码语言:javascript
复制
cb[i] = Checkbutton(..., variable=cbVariables[i].get())

当您使用variable属性时,必须给它一个对变量对象的引用,而不是对象中包含的值。将代码更改为:

代码语言:javascript
复制
cb[i] = Checkbutton(..., variable=cbVariables[i])

您正在对校验按钮文本做一些类似的错误。您正在创建一个StringVar,但随后对校验按钮文本使用StringVar的值,而不是实际的变量。在语法上,这与text属性一起使用是正确的,但它所做的工作比它所需要的要多。您应该使用textvariable属性,或者干脆不创建StringVar。

下面是如何使用textvariable属性而不是text属性:

代码语言:javascript
复制
cb[i] = Checkbutton(root, textvariable=cbTexts[i], ...)

如果这个文本永远不会改变的话,你根本不需要StringVar。如果是这样的话,您可以这样做并保存几行代码:

代码语言:javascript
复制
cb[i] = Checkbutton(root, text=checkBoxText(winSt[i]), ...)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21607174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档