You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter Entry组件设columnspan=2却无法跨两列的问题修复

问题修复方案

问题说明

当前代码运行后,Username输入框虽设置了columnspan=2,但仅占据一列宽度,无法实现与First name、Password左对齐,同时与Last name、Confirm右对齐的跨列显示效果。

核心问题与修复思路

  1. 初始化错误:原代码中Master = ()是语法错误,需改为Master = Tk()才能正确创建主窗口。
  2. 布局未拉伸:跨列组件默认不会自动填满指定列宽,需给Username输入框的grid方法添加sticky="ew"属性,使其沿水平方向拉伸。
  3. 列权重配置:给Frame的两列设置权重,确保两列宽度均匀分配,让跨列组件能准确覆盖两列范围。

修改后的完整代码

from tkinter import *

Master = Tk()  # 修复初始化错误
Master.attributes("-fullscreen", True)

Page = Frame(Master)
Page.place(relx=0.5, rely=0.5, anchor="center")

# 配置两列权重,使列宽均匀分配
Page.grid_columnconfigure(0, weight=1)
Page.grid_columnconfigure(1, weight=1)

FirstnameEntry = Entry(Page); FirstnameEntry.insert(0, "First name"); FirstnameEntry.grid(row=0, column=0, padx=5, pady=5)
FirstnameEntry.bind("<FocusIn>", lambda event: FirstnameEntry.get() == "First name" and FirstnameEntry.delete(0, END))
FirstnameEntry.bind("<FocusOut>", lambda event: FirstnameEntry.get() == "" and FirstnameEntry.insert(0, "First name"))

LastnameEntry = Entry(Page); LastnameEntry.insert(0, "Last name"); LastnameEntry.grid(row=0, column=1, padx=5, pady=5)
LastnameEntry.bind("<FocusIn>", lambda event: LastnameEntry.get() == "Last name" and LastnameEntry.delete(0, END))
LastnameEntry.bind("<FocusOut>", lambda event: LastnameEntry.get() == "" and LastnameEntry.insert(0, "Last name"))

# 添加sticky="ew"让输入框拉伸填满两列
UsernameEntry = Entry(Page); UsernameEntry.insert(0, "Username"); UsernameEntry.grid(row=1, column=0, columnspan=2, sticky="ew", padx=5, pady=5)
UsernameEntry.bind("<FocusIn>", lambda event: UsernameEntry.get() == "Username" and UsernameEntry.delete(0, END))
UsernameEntry.bind("<FocusOut>", lambda event: UsernameEntry.get() == "" and UsernameEntry.insert(0, "Username"))

PasswordEntry = Entry(Page); PasswordEntry.insert(0, "Password"); PasswordEntry.grid(row=2, column=0, padx=5, pady=5)
PasswordEntry.bind("<FocusIn>", lambda event: PasswordEntry.get() == "Password" and PasswordEntry.delete(0, END))
PasswordEntry.bind("<FocusOut>", lambda event: PasswordEntry.get() == "" and PasswordEntry.insert(0, "Password"))

ConfirmEntry = Entry(Page); ConfirmEntry.insert(0, "Confirm"); ConfirmEntry.grid(row=2, column=1, padx=5, pady=5)
ConfirmEntry.bind("<FocusIn>", lambda event: ConfirmEntry.get() == "Confirm" and ConfirmEntry.delete(0, END))
ConfirmEntry.bind("<FocusOut>", lambda event: ConfirmEntry.get() == "" and ConfirmEntry.insert(0, "Confirm"))

Master.mainloop()

关键修改点

  • 修复主窗口初始化错误:Master = Tk()
  • 为Page框架的两列设置权重:Page.grid_columnconfigure(0, weight=1)和Page.grid_columnconfigure(1, weight=1)
  • 给Username输入框添加sticky="ew",使其拉伸填满两列宽度
  • 新增padx和pady参数优化组件间距(可选,提升界面美观度)

内容的提问来源于stack exchange,提问作者user19222567

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:05:18