到目前为止这是我的代码:
master = Tk()
Label(master, text="Input:").grid(row=0)
e1 = Entry(master, width = 100)
e1.grid(row=0, column=1)
Button(master, text='Q', command=q_pressed).grid(row=3, column=2,
sticky=W, padx = 4, pady=4)
Button(master, text='C', command =c_input).grid(row=3, column=1,
sticky=W, padx = 0, pady=4)
Button(master, text='Confirm', command=parse_input).grid(row=3, column=0,
sticky=W, padx = 4, pady=4)
我试图使“Q”按钮位于“C”按钮的旁边(就像“C”如何位于“Confirm”按钮的旁边),但它却将其放置在Entry小部件结束的地方。
我知道这是一个网格管理问题。如何设置布局,使row=0,has text and entry widget,row=3有自己的独立列(0,1,2)用于按钮?
有可能不止一种方法来执行您想要的布局,我选择呈现一个干净的。您的
Entry
小部件在第一行的第二列中占据了很大的水平空间,因此将小部件放在它下面的下一行将给您带来麻烦。因为您知道下面有3个按钮,所以您可以使这个Entry
跨越两列(网格化时为columnspan=2
),并在网格化下一行时播放。但我更喜欢不同的方法,这也会产生更好的总体布局。您需要的是在第二行中为一个Frame
网格,它包含两列(因为在上面的行中有两个小部件)。然后你在这个新的Frame
上网格化你的按钮。这会将代码转换为:
您的问题是
Entry
e1
很长,包含100个字符,但它只跨一列。可以使用columnspan
在grid
命令中定义e1
使用的列数。下面使用columnspan = 30
的示例对我有效。你自己决定,什么是合理的columnspan
值。解决这个问题最简单的方法是拿一支铅笔和一些画纸。画出您想要小部件的位置,这将告诉您行、列、行跨度和列跨度选项需要什么值。
可能有不止一种方法来执行您想要的布局,我选择呈现一个干净的。您的
Entry
小部件在第一行的第二列中占据了很大的水平空间,因此将小部件放在它下面的下一行将给您带来麻烦。因为您知道下面有3个按钮,所以您可以使这个Entry
跨越两列(网格化时为columnspan=2
),并在网格化下一行时播放。但我更喜欢不同的方法,这也会产生更好的总体布局。您需要的是在第二行中为一个Frame
网格,它包含两列(因为在上面的行中有两个小部件)。然后你在这个新的Frame
上网格化你的按钮。这会将代码转换为:
相关问题 更多 >
编程相关推荐