¿Cómo detener el cambio de tamaño del widget Tkinter Text en el cambio de fuente?

Estoy tratando de crear un procesador de textos simple para que los principiantes aprendan Python un poco mejor.

Estoy usando el widget Tkinter Text para el progtwig de edición principal, el único problema es que la altura y el ancho están definidos por caracteres.

Esto crea un problema cuando cambio las fonts, ya que no todas las fonts tienen el mismo ancho.

Cada vez que se cambia la fuente, el widget de Texto cambia de tamaño, aunque técnicamente es del mismo ancho y alto. Esto parece ridículo al intentar escribir algo, estoy tratando de hacer que el procesador de textos sea lo más agradable posible.

¿Hay una manera de definir el ancho y la altura en píxeles?

.grid_propagate(False) no es útil porque el tamaño no cambia técnicamente, solo el ancho del carácter.

Estoy tratando de mantenerme alejado de wxPython por ahora, ya que todo lo que he hecho hasta ahora ha estado en Tkinter.

He hecho horas interminables de googlear extensas, pero no he encontrado soluciones.

Te equivocas cuando dices que no puedes usar grid_propagate(False) , porque puedes. grid_propagate está relacionado con el tamaño real , no con el atributo de tamaño. Además, si simplemente le da a su aplicación un tamaño fijo utilizando wm_geometry , los cambios de fuente no afectarán el tamaño de la ventana.

Aquí hay un ejemplo que usa grid_propagate , que establece el contenedor a un tamaño fijo en píxeles:

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