How To Stop Tkinter Text Widget Resize On Font Change?
I'm trying to create a simple word processor for starters to learn Python a bit better. I'm using the Tkinter Text widget for the main editing program, the only problem is the heig
Solution 1:
You are wrong when you say you can't use grid_propagate(False), because you can. grid_propagate is related to the actual size, not the size attribute. Also, if you simply give your application a fixed size using wm_geometry, font changes won't affect the size of the window.
Here's an example using grid_propagate, which sets the container to a fixed size in pixels: 
import Tkinter as tk
import tkFont
class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self._textFont = tkFont.Font(name="TextFont")
        self._textFont.configure(**tkFont.nametofont("TkDefaultFont").configure())
        toolbar = tk.Frame(self, borderwidth=0)
        container = tk.Frame(self, borderwidth=1, relief="sunken", 
                             width=600, height=600)
        container.grid_propagate(False)
        toolbar.pack(side="top", fill="x")
        container.pack(side="bottom", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)
        text = tk.Text(container, font="TextFont")
        text.grid(row=0, column=0, sticky="nsew")
        zoomin = tk.Button(toolbar, text="+", command=self.zoom_in)
        zoomout = tk.Button(toolbar, text="-", command=self.zoom_out)
        zoomin.pack(side="left")
        zoomout.pack(side="left")
        text.insert("end", '''Press te + and - buttons to increase or decrease the font size''')
    def zoom_in(self):
        font = tkFont.nametofont("TextFont")
        size = font.actual()["size"]+2
        font.configure(size=size)
    def zoom_out(self):
        font = tkFont.nametofont("TextFont")
        size = font.actual()["size"]-2
        font.configure(size=max(size, 8))
if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()
Solution 2:
Use the pack geometry manager to pack the widgets.
I was creating a notepad and wanted the font sample area to display the font size. So I created a label frame and added a label in it - i.e. AabYyZz - to display the font sample.
When I increased the font size the size of the label frame also increased, so I've tried the .pack_propagate method and it worked.
Post a Comment for "How To Stop Tkinter Text Widget Resize On Font Change?"