创建后无法更改框架颜色

时间:2015-02-11 04:47:03

标签: python tkinter

在下面的代码中,app是mainWindow的一个实例,它继承自Tkinter.Frame。我试图使用Frame.Configure方法来更改Frame的背景颜色。但是,调用self.configure(background =“yellow”)不起作用。有人能帮我理解我犯的错误吗?

import Tkinter


class mainWindow(Tkinter.Frame):
    def __init__(self, parent):
        Tkinter.Frame.__init__(self, master=parent)
        self.parent=parent
        self.button1=Tkinter.Button(master=self.parent, text='ONE', command=self.change)
        self.button1.pack()
        self.pack()

    def change(self):
        self.parent.wm_title("Changed")
        self.configure(background="yellow")


root = Tkinter.Tk()
root.geometry("600x600+50+50")
app=mainWindow(root)
root.mainloop()

2 个答案:

答案 0 :(得分:2)

它不起作用,因为你的Frame是"微小的"。它不包含任何小部件(按钮的父级是顶部窗口,而不是框架)。因此,要使框架变大,因此可见,您需要扩展它:

import Tkinter


class mainWindow(Tkinter.Frame):
    def __init__(self, parent):
        Tkinter.Frame.__init__(self, master=parent)
        self.parent=parent
        self.button1=Tkinter.Button(master=self.parent, 
                                    text='ONE', 
                                    command=self.change)

        self.button1.pack()
        self.pack(fill=Tkinter.BOTH, expand=1) #<--- expand frame

    def change(self):
        self.parent.wm_title("Changed")
        self.configure(background="yellow")


root = Tkinter.Tk()
root.geometry("600x600+50+50")
app=mainWindow(root)

root.mainloop()

答案 1 :(得分:1)

尝试self.parent.configure(background="yellow")

我是Tkinter的新手(几分钟新),所以我根据你的代码猜测框架根本没有显示。框架的父级是root,它也是按钮的父级。

所以在这里,我正在改变root(顶级小部件)背景

编辑:

根据我上面的推理和Marcin的回答,我推断出框架只是没有尺寸。所以这里是代码的编辑版本,扩展了框架,框架将包含按钮。

import Tkinter

class mainWindow(Tkinter.Frame):
    def __init__(self, parent):
        Tkinter.Frame.__init__(self, master=parent)
        self.parent=parent
        self.button1=Tkinter.Button(master=self, text='ONE', command=self.change)
        self.button1.pack()
        self.pack(fill=Tkinter.BOTH, expand=True)

    def change(self):
        self.parent.wm_title("Changed")
        self.configure(background="yellow")

root = Tkinter.Tk()
root.geometry("600x600+50+50")
app=mainWindow(root)
root.mainloop()