无法使tkinter中的checkbuttons正常工作

0 投票
2 回答
1346 浏览
提问于 2025-04-18 05:06

我不太明白为什么这个代码不管用,我试着调整了一下顺序和其他东西,但还是不行。这个代码的目的是显示“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()

撰写回答