您正在搜索列跨度和粘性:
import tkinter
import os
def submit():
os.chdir("/home/samip/forms")
with open(f'{user_val.get()}.txt', 'w') as file:
file.write(f'''Person Details
User: {user_val.get()}
Age: {age_val.get()}
Address: {address_val.get()}
''')
quit()
root = tkinter.Tk()
root.geometry("400x200")
root.maxsize(400, 200)
root.minsize(400, 200)
root.title("Mars form")
lab = tkinter.Label(text="Mars Form", font=("Arial", 15, "bold"), bg="orange", fg="white", padx=10)
lab.grid(columnspan=2, sticky='ew')
user = tkinter.Label(text="Name:")
age = tkinter.Label(text="Age:")
address = tkinter.Label(text="Address:")
user.grid()
age.grid()
address.grid()
user_val = tkinter.StringVar()
age_val = tkinter.StringVar()
address_val = tkinter.StringVar()
user_val_entry = tkinter.Entry(root, textvariable=user_val)
age_val_entry = tkinter.Entry(root, textvariable=age_val)
address_val_entry = tkinter.Entry(root, textvariable=address_val)
user_val_entry.grid(row=1, column=1)
age_val_entry.grid(row=2, column=1)
address_val_entry.grid(row=3, column=1)
tkinter.Button(root, text="Submit", command=submit).grid(row=4, column=1)
root.mainloop()
在这行(25)这里:
lab.grid(columnspan=2, sticky='ew')
我使用 columnspan 告诉 tkinter 合并给定数量的列。
sticky 告诉 tkinter 这个小部件坚持'ew'东西方。您会发现带有sticky='nsew' 女巫的代码表示北、南、东和西。
而出docs:
-columnspan n
插入从属,使其占据网格中的 n 列。默认为一列,除非窗口名称后跟 -,在
在这种情况下,columnspan 立即每增加一次
跟随 -.
-粘性样式
如果从属的单元格大于其请求的尺寸,则此选项可用于在其单元格内定位(或拉伸)从属单元。
样式是包含零个或多个字符 n、s、e 的字符串
或 w。字符串可以选择包含空格或逗号,但它们
被忽略。每个字母指的是一侧(北、南、东或
西),奴隶将“坚持”。如果 n 和 s(或 e 和 w)都是
指定,从属将被拉伸以填充整个高度(或
宽度)其腔。 -sticky 选项包含以下组合
包使用的-anchor 和-fill。默认值为“”,这会导致从属设备以其请求的大小在其空腔中居中。
更新
你的问题是:
它在一定程度上起作用,但我正在寻找替代品来填充
columnspan 仅对 2 生效我尝试了其他值但其他值
没有效果
根据您的代码,您最好的选择是使用grid_columnconfigure(*column, *weight) tkinter 方法。
可以在here找到完美的解释。
为什么这是您的最佳选择?
只是因为你使用了 tkinter 的几何方法。
那么它是如何工作的呢?
如果开发人员没有预先定义任何内容,tkinter 会自行计算窗口的大小。因此,您也可以只删除几何方法的线条以获得类似的效果。
但是由于您已经预先定义了几何图形,因此您已经构建了空间。 tkinter 的 grid 方法还通过它包含的最大小部件自动计算列或行的大小。因此,如果您拥有的最大小部件是 configured 与 (width=100) 并且宽度以像素为单位定义,您将获得每个 column 的 width 100 像素。与 height 的 row 相同。
这就是为什么你需要使用 tkinter 的 grid_columnconfigure 方法。
简而言之,这个方法告诉 tkinter 如果有空的空间,哪个小部件具有获取空间的优先级。
可以在下面找到我编辑的完整示例:
- 根列配置。
- 将您的按钮绑定到一个变量。
- 将网格方法与变量分开。因为每一种方法
返回一些东西。 more
- 编辑了网格参数,使其以
(column=0, columnspan=2)居中
import tkinter
import os
def submit():
os.chdir("/home/samip/forms")
with open(f'{user_val.get()}.txt', 'w') as file:
file.write(f'''Person Details
User: {user_val.get()}
Age: {age_val.get()}
Address: {address_val.get()}
''')
quit()
root = tkinter.Tk()
root.geometry("400x200")
root.maxsize(400, 200)
root.minsize(400, 200)
root.title("Mars form")
lab = tkinter.Label(text="Mars Form", font=("Arial", 15, "bold"), bg="orange", fg="white", padx=10)
lab.grid(columnspan=2, sticky='ew')
root.columnconfigure(0, weight=1)
user = tkinter.Label(text="Name:")
age = tkinter.Label(text="Age:")
address = tkinter.Label(text="Address:")
user.grid()
age.grid()
address.grid()
user_val = tkinter.StringVar()
age_val = tkinter.StringVar()
address_val = tkinter.StringVar()
user_val_entry = tkinter.Entry(root, textvariable=user_val)
age_val_entry = tkinter.Entry(root, textvariable=age_val)
address_val_entry = tkinter.Entry(root, textvariable=address_val)
user_val_entry.grid(row=1, column=1)
age_val_entry.grid(row=2, column=1)
address_val_entry.grid(row=3, column=1)
b1 = tkinter.Button(root, text="Submit", command=submit)
b1.grid(row=4, ,column=0, columnspan=2)
root.mainloop()
现在你应该知道 tkinter 网格方法的所有基本信息 abel to work your GUI out。玩得开心!