dragov 发表于 2025-7-15 13:58:04

Tkinter 程序:x 与 = 如何居中 ?



from tkinter import *
root=Tk()
root.config(background="ghostwhite")
f=Frame(root,background="ghostwhite")
f.pack(padx=20,pady=20)
v1=StringVar()
v2=StringVar()
v3=StringVar()
Entry(f,textvariable=v1,width=10).grid(row=0,column=0)
Label(f,text="x").grid(row=0,column=1)
Entry(f,textvariable=v2,width=10).grid(row=0,column=2)
Label(f,text="=").grid(row=0,column=3)
Entry(f,textvariable=v3,width=10).grid(row=0,column=4)
def gyl():
   result=int(v1.get())*int(v2.get())
   v3.set(result)
Button(f,text="乘法的计算结果",command=gyl,relief="ridge",borderwidth=8,font="方正艺黑简体 15 bold",foreground="lavender",background="orangered").grid(row=1,column=2,pady=30)
mainloop()

FishC 发表于 2025-7-15 14:00:14

在 Tkinter 中让 "x" 和 "=" 标签垂直居中,可以通过调整网格布局的 `sticky` 参数实现。以下是修改后的代码:


from tkinter import *
root = Tk()
root.config(background="ghostwhite")
f = Frame(root, background="ghostwhite")
f.pack(padx=20, pady=20)

v1 = StringVar()
v2 = StringVar()
v3 = StringVar()

# 修改点:所有组件添加 sticky="ns" 垂直居中
Entry(f, textvariable=v1, width=10).grid(row=0, column=0, sticky="ns")
Label(f, text="x").grid(row=0, column=1, sticky="ns")# 垂直居中
Entry(f, textvariable=v2, width=10).grid(row=0, column=2, sticky="ns")
Label(f, text="=").grid(row=0, column=3, sticky="ns")# 垂直居中
Entry(f, textvariable=v3, width=10).grid(row=0, column=4, sticky="ns")

def gyl():
    result = int(v1.get()) * int(v2.get())
    v3.set(result)

Button(
    f, text="乘法的计算结果", command=gyl, relief="ridge", borderwidth=8,
    font="方正艺黑简体 15 bold", foreground="lavender", background="orangered"
).grid(row=1, column=2, pady=30)

mainloop()


### 关键修改说明:
1. 在 grid() 方法中添加参数 sticky="ns"
   - "ns" 表示垂直方向拉伸(North-South),使组件在网格单元格内垂直居中
   - 适用于所有 Entry 和 Label 组件

2. 效果对比:
   - 原版:标签默认顶部对齐
   - 修改后:标签在垂直方向上居中显示

### 其他优化建议(可选):
1. 水平间距调整:在 Label 的 grid 中添加 padx=5 增加左右间距
   
   Label(f, text="x").grid(row=0, column=1, sticky="ns", padx=5)
   

2. 全局垂直居中:在 Frame 上设置行权重
   
   f.grid_rowconfigure(0, weight=1)# 添加到 f.pack() 之后
   

> 注意:如果使用其他字体或系统主题,可能需要微调参数。核心解决方案是 sticky="ns" 确保垂直居中。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小甲鱼的二师兄 发表于 2025-7-15 15:53:07

from tkinter import *

root = Tk()
root.config(background="ghostwhite")
f = Frame(root, background="ghostwhite")
f.pack(padx=20, pady=20)

# 让每一列都可以自适应宽度
for i in range(5):
    f.grid_columnconfigure(i, weight=1)

v1 = StringVar()
v2 = StringVar()
v3 = StringVar()

Entry(f, textvariable=v1, width=10, justify='center').grid(row=0, column=0)
Label(f, text="x", width=2, anchor="center").grid(row=0, column=1, sticky="nsew")
Entry(f, textvariable=v2, width=10, justify='center').grid(row=0, column=2)
Label(f, text="=", width=2, anchor="center").grid(row=0, column=3, sticky="nsew")
Entry(f, textvariable=v3, width=10, justify='center').grid(row=0, column=4)

def gyl():
    result = int(v1.get()) * int(v2.get())
    v3.set(result)

Button(
    f,
    text="乘法的计算结果",
    command=gyl,
    relief="ridge",
    borderwidth=8,
    font="方正艺黑简体 15 bold",
    foreground="lavender",
    background="orangered"
).grid(row=1, column=0, columnspan=5, pady=30)# 按钮也可以居中

mainloop()


不二如是 发表于 2025-7-15 16:06:02

在 grid 里,单元格的宽度默认由该列中最宽的控件决定——你的 Entry 大约有 80 px,而标签 “x”“=” 只有几个像素宽。

所以它们都被紧贴在输入框旁边,看起来就像“靠右对齐”了一样。

只要把第 1 列和第 3 列预留一点固定宽度,再让标签在单元格里铺满并居中即可。

代码很简单,自己做!

如果你想更简单,也可以直接在标签上加一个字符宽度:

Label(f, text="x", width=4, anchor="center", bg="ghostwhite").grid(...)
width 以字符为单位,同样能把列撑宽;不过用 grid_columnconfigure 更灵活,还能随窗口缩放保持居中。
页: [1]
查看完整版本: Tkinter 程序:x 与 = 如何居中 ?