Python 如何控制Tkinter栅格中的标签位置和间距

Python 如何控制Tkinter栅格中的标签位置和间距,python,tkinter,Python,Tkinter,现在我想在同一行计算食品价格,所以我也把它改为第2行,但是输出是这样的 食物返回到第0行,它为什么这样做?我试图得到这样的东西: foodprice=['3','2','1.50'] drinks = ['Water','Hot water','Medium water'] drinksprice = ['1','2','3'] myFrame3 = Frame(root, bg = '') myFrame3.pack() myFrame3.columnconfigure(0, weight

现在我想在同一行计算食品价格,所以我也把它改为第2行,但是输出是这样的

食物返回到第0行,它为什么这样做?我试图得到这样的东西:

foodprice=['3','2','1.50']
drinks = ['Water','Hot water','Medium water']
drinksprice = ['1','2','3']

myFrame3 = Frame(root, bg = '')
myFrame3.pack()

myFrame3.columnconfigure(0, weight=1)
myFrame3.columnconfigure(1, weight=2)

for x in range (len(food)):
    foodop = Label(myFrame3, font=("Impact", "15"), text = food[x])
    foodop.grid(row = 2+x, column = 4) # <--
for x in range (len(foodprice)):
    fprice = Label(myFrame3, font=("Impact", "15"), text = foodprice[x])
    fprice.grid(row = 2+x, column = 8) # <--

for x in range (len(drinks)):
    drinksop = Label(myFrame3, font=("Impact", "15"), text = drinks[x])
    drinksop.grid(row = 4+(len(food))+x, column = 4) # <--
for x in range (len(drinksprice)):
    drinksp = Label(myFrame3, font=("Impact", "15"), text = drinksprice[x])
    drinksp.grid(row = 4+(len(food))+x, column = 8) # <--
foodprice=['3'、'2'、'1.50']
饮料=[“水”、“热水”、“中水”]
drinksprice=['1','2','3']
myFrame3=帧(根,bg='')
myFrame3.pack()
myFrame3.columnconfigure(0,权重=1)
myFrame3.columnconfigure(1,权重=2)
对于范围内的x(len(食品)):
foodop=Label(myFrame3,字体=(“Impact”,“15”),text=food[x])

foodop.grid(row=2+x,column=4)#在文本周围创建空白与电子表格程序中的工作方式不同

如果
rowconfigure()
没有设置权重,Tkinter将折叠完全为空的网格行以防止出现这种情况。列也是如此

这样的布局:

foodprice=['3','2','1.50']
drinks = ['Water','Hot water','Medium water']
drinksprice = ['1','2','3']

myFrame3 = Frame(root, bg = '')
myFrame3.pack()

myFrame3.columnconfigure(0, weight=1)
myFrame3.columnconfigure(1, weight=2)

for x in range (len(food)):
    foodop = Label(myFrame3, font=("Impact", "15"), text = food[x])
    foodop.grid(row = 2+x, column = 4) # <--
for x in range (len(foodprice)):
    fprice = Label(myFrame3, font=("Impact", "15"), text = foodprice[x])
    fprice.grid(row = 2+x, column = 8) # <--

for x in range (len(drinks)):
    drinksop = Label(myFrame3, font=("Impact", "15"), text = drinks[x])
    drinksop.grid(row = 4+(len(food))+x, column = 4) # <--
for x in range (len(drinksprice)):
    drinksp = Label(myFrame3, font=("Impact", "15"), text = drinksprice[x])
    drinksp.grid(row = 4+(len(food))+x, column = 8) # <--

将tkinter作为tk导入
root=tk.tk()
定义位置(列、行、文本='Label',颜色='white'):
label=tk.label(根,text=text,bg=color)
label.grid(列=列,行=行,
ipadx=10,ipady=10,padx=1,pady=1,sticky=“NSEW”)
def make_布局(列、行):
对于cols中的c:
位置(c,0,c,‘浅灰色’)
对于行中的r:
位置(0,r,r,‘浅灰色’)
对于行中的r:
对于cols中的c:
位置(c,r,‘标签’)
制作布局图((1,2)、(1,2))
root.mainloop()
。。。看起来就像这样:

foodprice=['3','2','1.50']
drinks = ['Water','Hot water','Medium water']
drinksprice = ['1','2','3']

myFrame3 = Frame(root, bg = '')
myFrame3.pack()

myFrame3.columnconfigure(0, weight=1)
myFrame3.columnconfigure(1, weight=2)

for x in range (len(food)):
    foodop = Label(myFrame3, font=("Impact", "15"), text = food[x])
    foodop.grid(row = 2+x, column = 4) # <--
for x in range (len(foodprice)):
    fprice = Label(myFrame3, font=("Impact", "15"), text = foodprice[x])
    fprice.grid(row = 2+x, column = 8) # <--

for x in range (len(drinks)):
    drinksop = Label(myFrame3, font=("Impact", "15"), text = drinks[x])
    drinksop.grid(row = 4+(len(food))+x, column = 4) # <--
for x in range (len(drinksprice)):
    drinksp = Label(myFrame3, font=("Impact", "15"), text = drinksprice[x])
    drinksp.grid(row = 4+(len(food))+x, column = 8) # <--

不在列
8
29
和行
5
49
中配置权重

(若要获得此信息,请将
make_布局((1,2)、(1,2))
替换为
make_布局((7,30)、(4,50))

即使添加了权重,标签仍然高于权重空行,因此布局可能不像您想象的那样干净

这是我前几天读到的一篇很好的教程,详细介绍了这篇文章。它还介绍了
grid()
函数的可选
columnspan
rowspan
参数


最后但并非最不重要的一点是,您应该研究一下为什么不使用
.pack
管理器而不是
.grid
。我想在这种情况下使用起来会容易得多。我刚刚修改了你的问题,使它更容易理解(说话的标题、裁剪和嵌入的图像、没有水平滚动条的代码框),希望不会扭曲信息。顺便说一句:欢迎来到Stack Overflow,请不要忘记学习如何与社区成功互动。谢谢