我在Linux和Windows上指定Entry小部件大小时遇到问题。这些条目是在Linux上创建的:
http://i56.tinypic.com/2edaaeg.png
在Linux上,它们在Text小部件中看起来很好。用这行代码创建了2个Entry单元格:
tk.Entry(master, width=16)
宽度指定为16个字符。
但是,在Windows上,单元格占用的空间只有一半,我必须指定宽度为22,因为Windows上的字体大小较小。
我的问题是:有没有办法在Text小部件中指定这两个单元格的相对宽度,所以每个单元格占用父小部件的1/2?
答案 0 :(得分: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()