我试图在循环中生成独立的Checkbutton,但是具有相同名称的Checkbutton一起工作。我不知道我的错误在哪里..。
#!/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()发布于 2014-02-11 17:28:05
问题就在这一行上:
cb[i] = Checkbutton(..., variable=cbVariables[i].get())当您使用variable属性时,必须给它一个对变量对象的引用,而不是对象中包含的值。将代码更改为:
cb[i] = Checkbutton(..., variable=cbVariables[i])您正在对校验按钮文本做一些类似的错误。您正在创建一个StringVar,但随后对校验按钮文本使用StringVar的值,而不是实际的变量。在语法上,这与text属性一起使用是正确的,但它所做的工作比它所需要的要多。您应该使用textvariable属性,或者干脆不创建StringVar。
下面是如何使用textvariable属性而不是text属性:
cb[i] = Checkbutton(root, textvariable=cbTexts[i], ...)如果这个文本永远不会改变的话,你根本不需要StringVar。如果是这样的话,您可以这样做并保存几行代码:
cb[i] = Checkbutton(root, text=checkBoxText(winSt[i]), ...)https://stackoverflow.com/questions/21607174
复制相似问题