Using Tkinter in python to edit the title bar
If you don't create a root window, Tkinter will create one for you when you try to create any other widget. Thus, in your __init__
, because you haven't yet created a root window when you initialize the frame, Tkinter will create one for you. Then, you call make_widgets
which creates a second root window. That is why you are seeing two windows.
A well-written Tkinter program should always explicitly create a root window before creating any other widgets.
When you modify your code to explicitly create the root window, you'll end up with one window with the expected title.
Example:
from tkinter import Tk, Button, Frame, Entry, ENDclass ABC(Frame): def __init__(self,parent=None): Frame.__init__(self,parent) self.parent = parent self.pack() self.make_widgets() def make_widgets(self): # don't assume that self.parent is a root window. # instead, call `winfo_toplevel to get the root window self.winfo_toplevel().title("Simple Prog") # this adds something to the frame, otherwise the default # size of the window will be very small label = Entry(self) label.pack(side="top", fill="x")root = Tk()abc = ABC(root)root.mainloop()
Also note the use of self.make_widgets()
rather than ABC.make_widgets(self)
. While both end up doing the same thing, the former is the proper way to call the function.
Try something like:
from tkinter import Tk, Button, Frame, Entry, ENDclass ABC(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.pack() root = Tk()app = ABC(master=root)app.master.title("Simple Prog")app.mainloop()root.destroy()
Now you should have a frame with a title, then afterwards you can add windows fordifferent widgets if you like.