无法使tkinter中的checkbuttons正常工作
我不太明白为什么这个代码不管用,我试着调整了一下顺序和其他东西,但还是不行。这个代码的目的是显示“Null”这个词,当你选择任意一个复选框时,根据选择的数量是奇数还是偶数,它会把“Null”这个词改成“Odd”或者“Even”。如果有人能帮忙就太好了。
# Create a window
the_window = Tk()
# Give the window a title
the_window.title('Odd or Even')
##Some global variables
margin = 8
text = 'Null'
##Changing the size of the window
the_window.geometry("350x150")
##Making the label frame
labelframe = LabelFrame(the_window, bd = 3)
labelframe.grid(columnspan = 3, padx = margin, pady = margin)
##Adding the Label
changeable_label = Label(labelframe, text = text, font = ('Arial', 60),
fg = ('black'))
changeable_label.pack(side = TOP)
##Addind the Check Buttons
def odd_even():
chk_btn_value = value1 + value2 + value3
if chk_btn_value == 0:
text = 'Null'
elif chk_btn_value % 2 != 0:
text = 'Odd'
else:
text = 'Even'
var1 = IntVar()
var2 = IntVar()
var3 = IntVar()
value1 = var1.get()
value2 = var2.get()
value3 = var3.get()
alpha = Checkbutton(the_window, text = 'Alpha', variable = var1,
onvalue = 1, offvalue = 0, command = odd_even)
alpha.grid(row = 1, column = 1)
beta = Checkbutton(the_window, text = 'Beta', variable = var2,
onvalue = 1, offvalue = 0, command = odd_even)
beta.grid(row = 1, column = 2)
gamma = Checkbutton(the_window, text = 'Gamma', variable = var3,
onvalue = 1, offvalue = 0, command = odd_even)
gamma.grid(row = 1, column = 3)
# Start the event loop
the_window.mainloop()
2 个回答
-1
你需要在回调函数里面调用 .get() 方法。还可以试试 changeable_label.set("New Text!") 来改变标签的文本。Effbot 有非常好的 tkinter 资源,可以参考这个链接: http://effbot.org/tkinterbook/label.htm
from Tkinter import *
# Create a window
the_window = Tk()
# Give the window a title
the_window.title('Odd or Even')
##Some global variables
margin = 8
text = 'Null'
##Changing the size of the window
the_window.geometry("350x150")
##Making the label frame
labelframe = LabelFrame(the_window, bd = 3)
labelframe.grid(columnspan = 3, padx = margin, pady = margin)
##Adding the Label
changeable_label = Label(labelframe, text = text, font = ('Arial', 60),
fg = ('black'))
changeable_label.pack(side = TOP)
##Addind the Check Buttons
def odd_even():
value1 = var1.get()
value2 = var2.get()
value3 = var3.get()
chk_btn_value = value1 + value2 + value3
print chk_btn_value
if chk_btn_value == 0:
text = 'Null'
elif chk_btn_value % 2 != 0:
text = 'Odd'
else:
text = 'Even'
var1 = IntVar()
var2 = IntVar()
var3 = IntVar()
alpha = Checkbutton(the_window, text = 'Alpha', variable = var1,
onvalue = 1, offvalue = 0, command = odd_even)
alpha.grid(row = 1, column = 1)
beta = Checkbutton(the_window, text = 'Beta', variable = var2,
onvalue = 1, offvalue = 0, command = odd_even)
beta.grid(row = 1, column = 2)
gamma = Checkbutton(the_window, text = 'Gamma', variable = var3,
onvalue = 1, offvalue = 0, command = odd_even)
gamma.grid(row = 1, column = 3)
# Start the event loop
the_window.mainloop()
0
每次你调用这个函数时,都需要获取它们的值,因为每次你勾选或取消勾选时,这些值都会改变。而且,要更新标签的文本,你需要像这样写:label_name["text"] = "new_text"
另外,Checkbutton
的默认开和关的值分别是1和0,你不需要特别去写这些。
把这些都应用到你的代码中,结果会是这样。
from Tkinter import *
def odd_even():
value1 = var1.get()
value2 = var2.get()
value3 = var3.get()
chk_btn_value = value1 + value2 + value3
if chk_btn_value == 0:
changeable_label['text'] = "Null"
elif chk_btn_value % 2 != 0:
changeable_label['text'] = "Odd"
else:
changeable_label['text'] = "Even"
# Create a window
the_window = Tk()
# Give the window a title
the_window.title('Odd or Even')
##Some global variables
margin = 8
text = 'Null'
##Changing the size of the window
the_window.geometry("350x150")
##Making the label frame
labelframe = LabelFrame(the_window, bd = 3)
labelframe.grid(columnspan = 3, padx = margin, pady = margin)
##Adding the Label
changeable_label = Label(labelframe, text = text, font = ('Arial', 60),
fg = ('black'))
changeable_label.pack(side = TOP)
##Addind the Check Buttons
var1 = IntVar()
var2 = IntVar()
var3 = IntVar()
alpha = Checkbutton(the_window, text = 'Alpha', variable = var1,
command = odd_even)
alpha.grid(row = 1, column = 1)
beta = Checkbutton(the_window, text = 'Beta', variable = var2,
command = odd_even)
beta.grid(row = 1, column = 2)
gamma = Checkbutton(the_window, text = 'Gamma', variable = var3,
command = odd_even)
gamma.grid(row = 1, column = 3)
# Start the event loop
the_window.mainloop()