Tkinter使用grid()布局时控件未按预期对齐问题求助
问题核心原因
你布局错位的问题来自grid布局的两个常见使用错误:
- 没有给控件设置
sticky对齐属性,控件默认在所属单元格居中,不同单元格宽度不一致时就会出现错位 - 未统一列宽约束,不同行跨列的控件字符宽度计算不匹配,Entry和Button的字符宽度基准本身也存在差异
修正方案
你只需要调整grid相关的配置即可:
- 给第二列(索引1)设置全局列权重,保证拉伸时宽度适配
- 所有输入框、按钮设置
sticky="ew",让控件自动撑满所属单元格的宽度 - 去掉冗余的width参数,靠布局约束自动对齐,不需要手动计算字符宽度
修正后的完整代码
from tkinter import * # ---------------------------- PASSWORD GENERATOR ------------------------------- # # ---------------------------- SAVE PASSWORD ------------------------------- # # ---------------------------- UI SETUP ------------------------------- # window = Tk() window.title("Password Manager") window.config(padx=40, pady=40) # 给第二列设置权重,保证横向拉伸时优先填充这一列 window.grid_columnconfigure(1, weight=1) ##### Creating logo image canvas=Canvas(width=200, height=200) logo_image = PhotoImage(file='logo.png') canvas.create_image(100, 100, image=logo_image) canvas.grid(row=0, column=1) ##### Creating labels website_label = Label(text="Website:") website_label.grid(row=1, column=0) username_label = Label(text="Email/Username:") username_label.grid(row=2, column=0) password_label = Label(text="Password:") password_label.grid(row=3, column=0) ##### Creating buttons add_button = Button(text='Add') add_button.grid(row=4, column=1, columnspan=2, sticky="ew") # 撑满两列宽度 generate_button = Button(text='Generate Password') generate_button.grid(row=3, column=2, padx=(5,0)) # 加小边距和输入框隔开 ##### Creating entries website_entry = Entry() website_entry.grid(row=1, column=1, columnspan=2, sticky="ew", pady=2) website_entry.focus() username_entry = Entry() username_entry.grid(row=2, column=1, columnspan=2, sticky="ew", pady=2) username_entry.insert(0, "dummy_email@hotmail.com") password_entry = Entry() password_entry.grid(row=3, column=1, sticky="ew", pady=2) window.mainloop()
内容的提问来源于stack exchange,提问作者Delfinoln
相关产品推荐
相关产品推荐

