【问题标题】:Can't get the function to work with checkbuttons using tkinter无法使用 tkinter 使功能与检查按钮一起使用
【发布时间】:2014-05-02 10:02:15
【问题描述】:

我不确定为什么这不起作用,我已经尝试更改事物的顺序,但它仍然不起作用。代码的重点是显示 Null 一词,当您选择任何复选按钮时,根据它的奇数还是偶数,它会将 Null 一词更改为奇数或偶数。任何帮助都会很好。

# 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()

【问题讨论】:

    标签: python python-2.7 tkinter


    【解决方案1】:

    每次调用函数时都需要获取它们的值,因为每次选中或取消选中时它们都会发生变化。同样要更新标签的文本,您需要使用类似的东西。 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()
    

    【讨论】:

    • 您从这里粘贴了所有内容?或者只是通过在函数中移动gets 来更新您的代码?如果您只更新,您还需要更新 if 内部以更改标签文本。
    • 好的,我只是复制并粘贴了您的代码,它就可以工作了。我一定只是错过了改变一些东西。非常感谢!
    【解决方案2】:

    你必须在回调函数中调用 .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()
    

    【讨论】:

    • 谢谢,我尝试将 if 语句的内容更改为 changeable_label.set 和您的其他建议,但它仍然不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 2017-11-05
    相关资源
    最近更新 更多