在Python中更好地定位小部件按钮和输入框

在Python中更好地定位小部件按钮和输入框,python,tkinter,Python,Tkinter,好的,我正在使用Python的Tkinter模块,我想有5个输入框,每个输入框都是一个变量,组合成一个变量,用作Office自动安装程序和其他软件的串行键,用于中型办公室的安装脚本 除了给你一个关于内容的想法之外,这些都不是真正相关的 我试图把所有的输入框放在一个小空间里,最好是一列或两列,我目前使用的是4-6列,我可以检查 Tkinter可以这样做吗 以下是我到目前为止为脚本的这一部分编写的代码: Label(app, text="Office Serial Key").grid(row=3,

好的,我正在使用Python的Tkinter模块,我想有5个输入框,每个输入框都是一个变量,组合成一个变量,用作Office自动安装程序和其他软件的串行键,用于中型办公室的安装脚本

除了给你一个关于内容的想法之外,这些都不是真正相关的

我试图把所有的输入框放在一个小空间里,最好是一列或两列,我目前使用的是4-6列,我可以检查

Tkinter可以这样做吗

以下是我到目前为止为脚本的这一部分编写的代码:

Label(app, text="Office Serial Key").grid(row=3, column=0)
entries = ["e1", "e2", "e3", "e4", "e5"]
colnum = 1
for item in entries:
    item = Entry(app, width=10)
    item.grid(row=3, column=colnum)
    colnum = colnum + 1

我想让自己看起来更专业/更像微软的安装。

你可以做很多事情,让布局完全符合你的要求。我认为实现这一点的方法是将标签+入口放在另一个框架中,然后在网格化该框架时,使用columnspan关键字设置相对于应用程序中其他小部件的宽度

下面是一个愚蠢的例子:

import Tkinter as tk

root=tk.Tk()

for i in range(7):
    tk.Label(root,text='%d'%i,width=12).grid(row=0,column=i)

myframe=tk.Frame(root)

tk.Label(myframe, text="Office Serial Key").grid(row=0, column=0)
entries = ["e1", "e2", "e3", "e4", "e5"]
for column,item in enumerate(entries,start=1):
    item = tk.Entry(myframe, width=10)
    item.grid(row=0, column=column)

myframe.grid(row=1,column=0,columnspan=3)
root.mainloop()

使用enumerate比在循环中每次增加colnum更简洁:我不认为有任何布局问题是Tkinter的三个管理器(网格、打包和放置)中的一个无法解决的。它们非常灵活,总是让我想知道为什么其他工具包必须提供这么多不同的方法来完成同一件事情。这很好,说明了列以及它们都不在列中的事实。享乐让我看看是否可以在我的程序中复制这个。