到目前为止,这是我的代码:
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”一样),但它将它放在Entry小部件结束的位置。 / p>
我知道这是一个网格管理问题。如何设置布局使row = 0,有文本和条目小部件,row = 3有自己的独立列(0,1,2)用于按钮?
答案 0 :(得分:3)
您的问题是Entry
e1
非常长且包含100个字符,但它只跨越一列。您可以使用columnspan
在e1
命令中定义grid
的已使用列数。以下示例columnspan = 30
适用于我。确定自己,columnspan
的合理价值。
from Tkinter import *
master = Tk()
Label(master, text="Input:").grid(row=0)
e1 = Entry(master, width = 100)
e1.grid(row=0, column=1, columnspan=30)
Button(master, text='Q').grid(row=3, column=2)
Button(master, text='C').grid(row=3, column=1)
Button(master, text='Confirm').grid(row=3, column=0)
mainloop()
答案 1 :(得分:2)
可能有多种方法可以执行您想要的布局,我选择提供一个干净的方式。您的Entry
窗口小部件占据了第一行第二列中的大型水平空间,因此在下一行中将窗口小部件放在它下面会导致您遇到麻烦。由于您知道它下面会有3个按钮,因此您可以将此Entry
跨越两列(columnspan=2
同时对其进行网格化)并在对下一行进行网格化时使用它。但我更喜欢不同的方法,这也会产生更好的整体布局。你想要的是在第二行中将Frame
网格化为两列(因为在它上面的行中你有两个小部件)。然后,在新的Frame
上按下按钮。
这会将您的代码转换为:
import Tkinter
master = Tkinter.Tk()
Tkinter.Label(master, text="Input:").grid(row=0, column=0)
Tkinter.Entry(master, width = 100).grid(row=0, column=1)
frame = Tkinter.Frame()
frame.grid(row=1, column=0, columnspan=2, sticky='w')
Tkinter.Button(frame, text='Confirm').grid(row=0, column=0, sticky='w')
Tkinter.Button(frame, text='C').grid(row=0, column=1, sticky='w')
Tkinter.Button(frame, text='Q').grid(row=0, column=2, sticky='w')
master.mainloop()
答案 2 :(得分:0)
解决这个问题的最简单方法是拿一支铅笔和一些方格纸。绘制出您想要的小部件的位置,这将告诉您行,列,rowspan和columnspan选项所需的值。
答案 3 :(得分:0)
在这里输入代码{master = Tk() 标签(master,text ="输入:").grid(row = 0)
e1 = Entry(master, width=100)
e1.grid(row=0, column=1, columnspan=10)
Button(master, text='Q', width=5, command=q_pressed).grid(row=3, column=1, padx=0, ipadx=5, pady=4, sticky=E)
Button(master, text='C', width=5, command =c_input).grid(row=3, column=1, padx=0, ipadx=5, pady=4, sticky=W)
Button(master, text='Confirm', width=10, command=parse_input).grid(row=3, column=0, padx=0, pady=4, sticky=W)
mainloop()}
由于您希望输入字符串为100个字符,因此我的单元格/列宽为10,用于简单的数学除法。将我的columnspan设置为10.我摆脱了padx,因为它属于边框宽度并使用了与内部文本宽度相关的ipadx。入门设置为10列宽10 char。使用"输入"文本为1列。这将允许我使用10个字符或一列用于文本"确认"我可以通过制作按钮" c"来打破第1列。 &安培; " Q" 5宽度使用宽度= 5。然后使用justfy put" c"西和" q"东
在我看来,这是最简单的方法。