1

我在 Linux 和 Windows 上指定 Entry 小部件大小时遇到​​问题。这些条目是在 Linux 上创建的:

在 Linux 上,它们在 Text 小部件中看起来很好。用这行代码一一创建了 2 个条目单元格:

tk.Entry(master, width=16)

宽度指定为 16 个字符长。

但是,在 Windows 上,单元格只占用一半空间,我必须指定 22 的宽度,因为 Windows 上的字体更小。

我的问题是:有没有办法在 Text 小部件中指定这两个单元格的相对宽度,所以每个单元格占用父小部件的 1/2?

4

1 回答 1

1

在文本小部件中?不,没有对相对宽度的直接支持。在一个框架内?是的。如果你把它们放在一个文本小部件中(我想,所以你可以滚动它们)你必须自己管理宽度。您可以将绑定添加到<Configure>文本小部件的事件。当文本小部件改变大小时触发,您可以在该点调整所有小部件的大小。

最简单的方法是使用 将它们放在框架中grid,然后将框架放在画布中以便您可以滚动它。

这是一个例子:

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("<Configure>", 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()
于 2011-10-27T19:09:33.197 回答