为什么我的Tkinter窗口背景没有改变?

时间:2017-11-15 07:22:41

标签: python python-3.x tkinter

我有一个小程序,其功能可以改变不同窗口的背景颜色,而不是我用来询问背景颜色的框架。 (我希望你能理解这一点。)该程序是用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()

2 个答案:

答案 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,因为您宣布wertStringVar(),但您要与int进行比较。通过int(c)转换或比较字符串:

if c == '1':

或者可能将wert声明为IntVar()。另外,重新阅读Python global语句的工作原理 - 在函数中修改全局,而不是在全局定义的地方使用它。

答案 1 :(得分:1)

不应将wert声明为StringVar,而应将其声明为IntVar,因为在函数OptionButton中,您在字符串和int之间进行比较,因此它总是进入else部分,因此您的背景始终为黄色