我有一个小程序,其功能可以改变不同窗口的背景颜色,而不是我用来询问背景颜色的框架。 (我希望你能理解这一点。)该程序是用Python编写的,带有Tkinter库。
每次我在窗口中单击“启用”时,它会更改第二个窗口中背景的颜色,但不会更改我选择的颜色。
问题出在哪里?
def Options():
def OptionButton():
c= wert.get()
if c == 1:
fenster.config(background="red")
elif c == 2:
fenster.config(background="blue")
else:
fenster.config(background="yellow")
global usermod
usermod= tkinter.Entry.get(opEntry)
fenster.update()
option.destroy()
def close():
option.destroy()
option=tkinter.Tk()
option.title("Options")
option.config(background="white")
#Backgroundframe
bgFrame= tkinter.Frame(option)
bgFrame.grid(row=0, column=0, padx=10, pady=20)
info3=tkinter.Label(bgFrame,text="Hintergrund im Menü")
info3.grid(row=1,column=0,padx=10, pady=20)
#2 Radiobutton
global wert
wert = tkinter.StringVar()
knopfA=tkinter.Radiobutton(bgFrame,text="Red", variable=wert,value="1")
knopfB=tkinter.Radiobutton(bgFrame,text="Blue", variable=wert, value="2")
knopfC=tkinter.Radiobutton(bgFrame,text="green", variable=wert,value="3")
knopfA.grid(column=0,row=2)
knopfB.grid(column=0,row=3)
knopfC.grid(column=0,row=4)
knopfA.select()
#OptionFrame
opFrame = tkinter.Frame(option)
opFrame.grid(row=0, column=1,padx=10,pady=20)
#Optionbutton
oplabel=tkinter.Label(opFrame,text="Value User Mode")
oplabel.grid(row=1,column=0,padx=10,pady=2)
opEntry=tkinter.Entry(opFrame,width=12)
opEntry.grid(row=2,column=0,padx=10,pady=2)
#OptionButtonFrame
btFrame=tkinter.Frame(option)
btFrame.grid(row=3,column=0,padx=10,pady=20)
opbutton=tkinter.Button(btFrame,text="Enable", command = lambda:OptionButton())
opbutton.grid(row=1, column=0,padx=10,pady=2)
clbutton=tkinter.Button(btFrame,text="close",command=lambda:close())
clbutton.grid(row=2, column=0,padx=10,pady=2)
option.mainloop()
答案 0 :(得分:3)
问题是这段代码:
c = wert.get()
if c == 1:
fenster.config(background="red")
elif c == 2:
fenster.config(background="blue")
else:
fenster.config(background="yellow")
.get()
方法返回str
,因为您宣布wert
为StringVar()
,但您要与int
进行比较。通过int(c)
转换或比较字符串:
if c == '1':
或者可能将wert
声明为IntVar()
。另外,重新阅读Python global
语句的工作原理 - 在函数中修改全局,而不是在全局定义的地方使用它。
答案 1 :(得分:1)
不应将wert声明为StringVar,而应将其声明为IntVar,因为在函数OptionButton中,您在字符串和int之间进行比较,因此它总是进入else部分,因此您的背景始终为黄色