Python中的单选按钮(TKinter)



我忙于做一些家庭作业,我一直在做这个练习。任务是在3列中创建12个标签,每列下都有一个单选按钮。当选择单选按钮时,其上方一行的颜色需要更改。当单选按钮未被选中时,它们会变回原来的颜色。当程序启动时,必须不选择任何单选按钮。

我有两个问题。

  1. 我不知道如何在所有单选按钮都未选中的情况下启动程序。目前,同时选择两个
  2. 改变方框颜色的函数似乎在程序加载时运行。它们不会变回原来的颜色

这是我的代码:

# 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

我不知道如何用所有的收音机启动这个节目按钮未选中。目前,同时选择两个。

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

当程序加载。它们不会变回原来的颜色。

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

command=change_third_set_colour()->command=change_third_set_colour


BTW、place应分别调用,否则Radio_1Radio_2Radio_3将变为None,因为place方法返回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_colourchange_third_set_colour以重置其他标签的颜色。

  1. 我不知道如何在所有单选按钮都未选中的情况下启动程序。目前,同时选择两个。
    对于这个问题,首先需要使用"var"将它们作为组。您已经给定了值,但也应该给定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改变方框颜色的功能似乎在程序加载时运行。它们不会变回原来的颜色
对于我上面指定的这个问题,您可以命令方法设置新的颜色,并记住在更改颜色之前,获取标签的颜色并保存在类或全局变量中。那么从新代码恢复到旧的/原始颜色将是有帮助的

最新更新