原代码
from tkinter import *
class GridMangerDemo:
window = Tk()
window.title("Grid Manager Demo")
message = Message(
window, text="This Message widget occupies three rows and two columns"
)
message.grid(row=1, column=1, rowspan=3, columnspan=2)
Label(window, text="First Name: ").grid(row=1, column=3)
Entry(window).grid(row=1, column=4, padx=5, pady=5)
Label(window, text="Last Name: ").grid(row=2, column=3)
Entry(window).grid(row=2, column=4)
Button(window, text="Get Name").grid(row=3, padx=5, pady=5, column=4, sticky=E)
window.mainloop()
GridMangerDemo()
import tkinter as tk # 避免导入*,减少命名冲突
class GridManagerOptimized:
# 提取布局常量,便于统一修改
PAD_X = 5
PAD_Y = 5
MSG_ROWSPAN = 3
MSG_COLSPAN = 2
def __init__(self):
# 实例级窗口,支持多实例创建
self.window = tk.Tk()
self.window.title("Grid Manager Optimized")
self._setup_layout_weights() # 设置行列权重
self._create_widgets() # 创建组件
self._layout_widgets() # 布局组件
def _setup_layout_weights(self):
"""设置行列权重,实现窗口缩放自适应"""
# 列权重:列4(Entry/Button)自适应拉伸
self.window.columnconfigure(4, weight=1)
# 行权重:行1-3均分窗口高度
for row in range(1, 4):
self.window.rowconfigure(row, weight=1)
def _create_widgets(self):
"""创建所有组件,保存为实例属性"""
# 消息组件
self.msg_label = tk.Message(
self.window,
text="This Message widget occupies three rows and two columns",
wraplength=200 # 限制消息宽度,避免文字溢出
)
# 姓名标签与输入框
self.first_name_label = tk.Label(self.window, text="First Name: ")
self.first_name_entry = tk.Entry(self.window)
self.last_name_label = tk.Label(self.window, text="Last Name: ")
self.last_name_entry = tk.Entry(self.window)
# 按钮(绑定点击事件)
self.get_name_btn = tk.Button(
self.window,
text="Get Name",
command=self._on_get_name_click # 绑定点击逻辑
)
def _layout_widgets(self):
"""统一布局所有组件,规范对齐和间距"""
# 消息组件:跨3行2列,居中对齐
self.msg_label.grid(
row=1, column=1,
rowspan=self.MSG_ROWSPAN,
columnspan=self.MSG_COLSPAN,
padx=self.PAD_X, pady=self.PAD_Y,
sticky="nsew" # 上下左右拉伸,适配单元格大小
)
# 名:标签右对齐,输入框左对齐
self.first_name_label.grid(
row=1, column=3,
padx=self.PAD_X, pady=self.PAD_Y,
sticky="e" # 右对齐
)
self.first_name_entry.grid(
row=1, column=4,
padx=self.PAD_X, pady=self.PAD_Y,
sticky="w" # 左对齐
)
# 姓:同名字段对齐规则
self.last_name_label.grid(
row=2, column=3,
padx=self.PAD_X, pady=self.PAD_Y,
sticky="e"
)
self.last_name_entry.grid(
row=2, column=4,
padx=self.PAD_X, pady=self.PAD_Y,
sticky="w"
)
# 按钮:右对齐,占据列4
self.get_name_btn.grid(
row=3, column=4,
padx=self.PAD_X, pady=self.PAD_Y,
sticky="e"
)
def _on_get_name_click(self):
"""按钮点击事件:获取并打印姓名"""
first_name = self.first_name_entry.get().strip()
last_name = self.last_name_entry.get().strip()
print(f"Full Name: {first_name} {last_name}")
# 可选:弹窗展示结果
tk.messagebox.showinfo("Result", f"Full Name: {first_name} {last_name}")
def run(self):
"""启动主循环"""
self.window.mainloop()
if __name__ == "__main__":
app = GridManagerOptimized()
app.run()
网硕互联帮助中心



![[python]共享舞蹈课程预约系统 健身房的小程序设计视频(编号:91761267)-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/02/20260224145806-699dbc7eddca3-220x150.jpg)

评论前必须登录!
注册