How to stop Tkinter Text widget resize on font change?

后端 未结 3 900
不思量自难忘°
不思量自难忘° 2020-12-09 22:37

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

3条回答
  •  失恋的感觉
    2020-12-09 23:16

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

提交回复
热议问题