sticky
和from Tkinter import *
root = Tk()
root.geometry("250x200")
myFrame = Frame(root, bd=1, relief="sunken")
myFrame.pack(fill=X, padx=10)
myLabel1 = Label(myFrame, text="left").grid(sticky=W)
myLabel2 = Label(myFrame, text="right").grid(sticky=E)
root.mainloop()
并需要您的建议:
myLabel1 = Label(myFrame, text="left").grid(row=0, sticky=W)
myLabel2 = Label(myFrame, text="right").grid(row=0, sticky=E)
此代码将两个标签放在左侧但彼此叠加。如果我把它们放在同一行
myLabel1 = Label(myFrame, text="left").grid(row=0, column=0, sticky=W)
myLabel2 = Label(myFrame, text="right").grid(row=0, column=1, sticky=E)
它们处于完全相同的位置,因此myLabel2涵盖myLabel1。
如果我这样做
grid
然后myLabel2确实是myLabel1的右边,但不是在框架的右侧(尽管框架没有调整大小)。
我想实际的问题是:如何让<a data-controls-modal="id" data-backdrop="static" data-keyboard="false" href="#">
扩展到整个框架(在x维度上),这样粘性= E的确意味着“框架的右侧”而非“正确”第一列的一侧与myLabel1一样宽。“
答案 0 :(得分:1)
为了将myLabel2
放在框架的右侧,您需要使用myFrame.columnconfigure(1, weight=1)
,以便第1列将展开以填充框架。
如果你这样做
myFrame.columnconfigure(0, weight=1)
myFrame.columnconfigure(1, weight=1)
然后每列将占用一半的帧,但您也可以指定不同的权重以使一列大于另一列。您未指定任何重量的列会调整其宽度以适合其内容。
方法rowconfigure
对行完全相同。
答案 1 :(得分:1)
我猜实际的问题是:如何让网格扩展到整个框架(在x维度上),这样粘性= E的确意味着“框架的右侧”,而不是“第一个框架的右侧”与myLabel1“
一样宽的列
对此的简短回答是确保在一个框架内,至少有一列具有非零权重。列的weight
属性告诉tkinter如何分配任何额外的空间。默认值为零,表示列不会获得任何额外空间。额外的空间在最后一列和第一行的右侧和下方未使用。
注意:weight
值可以是任何正整数。数字是相对的,因此权重为2将创建一个列,其额外空间是权重为1的列的两倍。
根据经验,您应始终指定至少一行和一列以具有正重量。通常这是“英雄”小部件(通常是画布或文本小部件),但它也可以是用作间隔符的空行或列。
布局高度依赖于容器中的所有内容。如果您只想要两个标签,我建议创建一个三列配置。 myLabel1
可以进入第0列,myLabel2
可以进入第2列,您可以将第1列配置为空并填充所有空白
myLabel1 = Label(...)
myLabel2 = Label(...)
myLabel1.grid(row=0, column=0, sticky="w")
myLabel2.grid(row=0, column=2, sticky="e")
myFrame.grid_columnconfigure(1, weight=1)
myFrame.grid_rowconfigure(0, weight=1)
另一种选择是仅使用两列,并让每列具有相同的权重,以便所有额外的空间在两列之间均匀分配。