akrishnamo
akrishnamo

Reputation: 459

Unable to change frame color once created

In the code below, app is an instance of mainWindow, which inherits from Tkinter.Frame. I am trying to use the Frame.Configure method to change the background color of the Frame.However, calling self.configure(background="yellow") doesn't work. Can someone help me understand what mistake I am making?

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()

Upvotes: 2

Views: 1560

Answers (2)

Quan To
Quan To

Reputation: 696

Try self.parent.configure(background="yellow")

I'm new to Tkinter (few-minute new), so my guess based on your code is that the frame is not showing at all. The frame's parent is root, which is also the button's parent.

So here, I'm changing the root's (top level widget) background

Edited:

Base on my reasoning above, and Marcin's answer, I deduce that the frame simply just does not have a size. So here's an edited version of your code with the frame expanded, and the frame will contain the button.

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()

Upvotes: 1

Marcin
Marcin

Reputation: 238507

It does not work, because your Frame is "tiny". It does not contain any widgets (button's parent is the top window, not the frame). So to make frame big, thus visible, you need to expand it:

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()

Upvotes: 2

Related Questions