Especifique el ancho relativo de dos "entradas" incrustadas dentro del widget "texto"

Tengo un problema al especificar el tamaño del widget de entrada en Linux y Windows. Estas entradas fueron creadas en Linux:

http://i56.tinypic.com/2edaaeg.png

En Linux, se ven bien dentro del widget de texto. Hay 2 celdas de entrada una por una, creadas con esta línea de código:

tk.Entry (master, width = 16)

El ancho se especifica como 16 caracteres de longitud.

Sin embargo, en Windows las celdas ocupan solo la mitad del espacio y tengo que especificar el ancho de 22, porque el tamaño de la fuente es más pequeño en Windows.

Mi pregunta es: ¿hay una manera de especificar un ancho relativo de estas dos celdas en el widget de Texto, por lo que cada celda toma la mitad del widget principal?

1

1 Respuestas

Within a text widget? No, there is no direct support for relative widths. within a frame? yes. If you are putting them in a text widget (I presume, so you can scroll them) you have to manage the widths yourself. You can add a binding to the event of the text widget. This fires when the text widget changes size, and you can resize all the widgets at that point.

Lo más fácil es colocarlos en un marco utilizando grid , luego colocar el marco en un lienzo para que pueda desplazarlo.

Aquí hay un ejemplo:

import Tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.canvas = tk.Canvas(self, width=200, highlightthickness=0)
        self.vsb = tk.Scrollbar(orient="vertical", command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)
        self.vsb.pack(side="right", fill="y")
        self.canvas.pack(side="left", fill="both", expand=True)

        self.container = tk.Frame(self.canvas, borderwidth=0, highlightthickness=0)
        self.container.grid_columnconfigure(0, weight=1)
        self.container.grid_columnconfigure(1, weight=1)
        for i in range(30):
            e1 = tk.Entry(self.container)
            e2 = tk.Entry(self.container)
            e1.grid(row=i, column=0,sticky="ew")
            e2.grid(row=i, column=1,sticky="ew")
            e1.insert(0, "find %s" % i)
            e2.insert(0, "replace %s" % i)

        self.canvas.create_window((0,0), anchor="nw", window=self.container, tags="container")
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))
        self.canvas.bind("", self.OnCanvasConfigure)

    def OnCanvasConfigure(self, event):
        self.canvas.itemconfigure("container", width=event.width)
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()
1
agregado
Gracias, Brian - otra vez :) Estaba realmente luchando con este widget, pero espero que ahora esté completo para lo que necesito.
agregado el autor marw, fuente