Python中的Radiobuttons(TKinter)

时间:2016-05-06 06:04:56

标签: python python-2.7 tkinter radio-button

我正在做一些功课,我坚持做这个练习。任务是在3列中创建12个标签,每列下面都有一个单选按钮。选择单选按钮时,需要更改其上方行的颜色。当取消选择单选按钮时,它们会变回原始颜色。程序启动时,不能选择任何单选按钮。

我有两个问题。

  1. 我无法弄清楚如何在未选中所有单选按钮的情况下启动程序。目前,一次选择两个。
  2. 更改程序框颜色的功能似乎在程序加载时运行。它们不会变回原来的颜色。
  3. 这是我的代码:

    # Import the Tkinter functions
    from Tkinter import *
    
    # Create a window
    the_window = Tk()
    the_window.geometry('460x200')
    
    # Give the window a title
    the_window.title('Show Columns')
    
    #Change first set colour
    def change_first_set_colour():
        label1.configure(bg="blue")
        label2.configure(bg="blue")
        label3.configure(bg="blue")
        label4.configure(bg="blue")
    
    #Change first set colour
    def change_second_set_colour():
        label5.configure(bg="blue")
        label6.configure(bg="blue")
        label7.configure(bg="blue")
        label8.configure(bg="blue")
    
    #Change first set colour
    def change_third_set_colour():
        label9.configure(bg="blue")
        label10.configure(bg="blue")
        label11.configure(bg="blue")
        label12.configure(bg="blue")
    
    #Create label1
    label1 = Label(the_window, bg="grey", fg="black", width=20, height=2)
    label1.place(x=5, y=5)
    
    #Create label2
    label2 = Label(the_window, bg="grey", fg="black", width=20, height=2)
    label2.place(x=5, y=45)
    
    #Create label3
    label3 = Label(the_window, bg="grey", fg="black", width=20, height=2)
    label3.place(x=5, y=85)
    
    #Create label4
    label4 = Label(the_window, bg="grey", fg="black", width=20, height=2)
    label4.place(x=5, y=125)
    
    #Create Radio Button 1
    Radio_1 = Radiobutton(the_window,
                          text="First",
                          command=change_first_set_colour(),
                          value=1).place(x=50, y=165)
    
    #Create label5
    label5 = Label(the_window, bg="grey", fg="black", width=20, height=2)
    label5.place(x=155, y=5)
    
    #Create label6
    label6 = Label(the_window, bg="grey", fg="black", width=20, height=2)
    label6.place(x=155, y=45)
    
    #Create label7
    label7 = Label(the_window, bg="grey", fg="black", width=20, height=2)
    label7.place(x=155, y=85)
    
    #Create label8
    label8 = Label(the_window, bg="grey", fg="black", width=20, height=2)
    label8.place(x=155, y=125)
    
    #Create Radio Button 2
    Radio_2 = Radiobutton(the_window,
                          text="Second",
                          command=change_second_set_colour(),
                          value=2).place(x=180, y=165)
    
    #Create label9
    label9 = Label(the_window, bg="grey", fg="black", width=20, height=2)
    label9.place(x=305, y=5)
    
    #Create label10
    label10 = Label(the_window, bg="grey", fg="black", width=20, height=2)
    label10.place(x=305, y=45)
    
    #Create label11
    label11 = Label(the_window, bg="grey", fg="black", width=20, height=2)
    label11.place(x=305, y=85)
    
    #Create label12
    label12 = Label(the_window, bg="grey", fg="black", width=20, height=2)
    label12.place(x=305, y=125)
    
    Radio_3 = Radiobutton(the_window,
                          text="Third",
                          command=change_third_set_colour(),
                          value=3).place(x=345, y=165)
    
    #----------------------------------------------------------------
    
    # Start the event loop to react to user inputs
    the_window.mainloop()
    

    PS:我的大学仍然使用Python 2.7

2 个答案:

答案 0 :(得分:0)

  

我无法弄清楚如何用所有收音机启动程序   按钮未选中。目前,一次选择两个。

使用与任何单选按钮都不匹配的值的变量'值(例如0)。

  

更改框颜色的功能似乎在运行时运行   程序加载。它们不会变回原来的颜色。

传递函数本身,不返回函数调用的值。换句话说,请删除()

command=change_third_set_colour() - > command=change_third_set_colour

BTW,place应单独调用,否则Radio_1Radio_2Radio_3会变为None,因为place方法返回{{1} }}

None
应修改

radio_var = IntVar(value=0) Radio_1 = Radiobutton(the_window, text="First", variable=radio_var, # <--- command=change_first_set_colour, # <--- value=1) Radio_1.place(x=50, y=165) # <--- ... Radio_2 = Radiobutton(the_window, text="Second", variable=radio_var, # <--- command=change_second_set_colour, # <--- value=2) Radio_2.place(x=180, y=165) # <--- ... Radio_3 = Radiobutton(the_window, text="Third", variable=radio_var, # <--- command=change_third_set_colour, # <--- value=3) Radio_3.place(x=345, y=165) # <--- change_first_set_colourchange_second_set_colour以重置其他标签&#39;颜色。

答案 1 :(得分:0)

  1. 我无法弄清楚如何在未选中所有单选按钮的情况下启动程序。目前,一次选择两个。
    对于这个问题,首先你需要使用&#39; var&#39;将它们作为一个组。你已经给出了价值,但你也应该让var将它们作为一组并获得与它们相关的价值 var = IntVar()
    R1 = Radiobutton(root, text="Option 1", variable=var, value=1, command=sel) R2 = Radiobutton(root, text="Option 1", variable=var, value=1, command=sel)

    使用命令实现获取值 def sel(): selection = "You selected the option " + str(var.get())

    或者您可以在案例中获得颜色代码

  2. 2更改程序框颜色的功能似乎在程序加载时运行。它们不会变回原来的颜色
        对于我在上面指定的这个问题,您可以使用命令方法设置新颜色,并记住在更改颜色之前获取标签的颜色并在类或全局变量中本地保存。然后从新代码旧/原始颜色恢复

    将有所帮助