Specificeer de relatieve breedte van twee ingesloten "entries" in de widget "text"

Ik heb een probleem bij het opgeven van de grootte van de Entry-widget op Linux en Windows. Deze items zijn gemaakt op Linux:

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

Op Linux zien ze er prima uit in de Tekst-widget. Er zijn twee invoercellen één voor één, gemaakt met deze regel code:

tk.Entry (master, width = 16)

De breedte wordt opgegeven als zijnde 16 tekens lang.

In Windows nemen de cellen echter slechts de helft van de ruimte in beslag en moet ik de breedte van 22 opgeven, omdat de tekengrootte kleiner is in Windows.

Mijn vraag is: is er een manier om een ​​relatieve breedte van deze twee cellen in de tekstwidget op te geven, zodat elke cel 1/2 van de bovenliggende widget in beslag neemt?

1

1 antwoord

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.

Het gemakkelijkste is om ze in een frame te plaatsen met behulp van grid en plaats het frame vervolgens in een canvas zodat je het kunt verschuiven.

Hier is een voorbeeld:

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
toegevoegd
Bedankt, Brian - alweer :) Ik was echt aan het worstelen met deze widget, maar ik hoop dat dit nu compleet is voor wat ik nodig heb.
toegevoegd de auteur marw, de bron