我正在做一些功课,我坚持做这个练习。任务是在3列中创建12个标签,每列下面都有一个单选按钮。选择单选按钮时,需要更改其上方行的颜色。当取消选择单选按钮时,它们会变回原始颜色。程序启动时,不能选择任何单选按钮。
我有两个问题。
这是我的代码:
# 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 :(得分:0)
我无法弄清楚如何用所有收音机启动程序 按钮未选中。目前,一次选择两个。
使用与任何单选按钮都不匹配的值的变量'值(例如0)。
更改框颜色的功能似乎在运行时运行 程序加载。它们不会变回原来的颜色。
传递函数本身,不返回函数调用的值。换句话说,请删除()
command=change_third_set_colour()
- > command=change_third_set_colour
BTW,place
应单独调用,否则Radio_1
,Radio_2
,Radio_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_colour
,change_second_set_colour
以重置其他标签&#39;颜色。
答案 1 :(得分:0)
我无法弄清楚如何在未选中所有单选按钮的情况下启动程序。目前,一次选择两个。
对于这个问题,首先你需要使用&#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更改程序框颜色的功能似乎在程序加载时运行。它们不会变回原来的颜色
对于我在上面指定的这个问题,您可以使用命令方法设置新颜色,并记住在更改颜色之前获取标签的颜色并在类或全局变量中本地保存。然后从新代码旧/原始颜色恢复