鱼C论坛

 找回密码
 立即注册
查看: 65|回复: 3

[已解决]Tkinter 程序:x 与 = 如何居中 ?

[复制链接]
发表于 前天 13:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

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


最佳答案
前天 15:53
  1. from tkinter import *

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

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

  9. v1 = StringVar()
  10. v2 = StringVar()
  11. v3 = StringVar()

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

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

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

  30. mainloop()
复制代码


微信截图_20250715155251.png
无标题.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 前天 14:00 | 显示全部楼层
在 Tkinter 中让 "x" 和 "=" 标签垂直居中,可以通过调整网格布局的 `sticky` 参数实现。以下是修改后的代码:


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

  6. v1 = StringVar()
  7. v2 = StringVar()
  8. v3 = StringVar()

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

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

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

  22. mainloop()
复制代码


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

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

### 其他优化建议(可选):
1. 水平间距调整:在 Label 的 grid 中添加 padx=5 增加左右间距
  

  1.    Label(f, text="x").grid(row=0, column=1, sticky="ns", padx=5)
  2.    
复制代码


2. 全局垂直居中:在 Frame 上设置行权重
  

  1.    f.grid_rowconfigure(0, weight=1)  # 添加到 f.pack() 之后
  2.    
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 15:53 | 显示全部楼层    本楼为最佳答案   
  1. from tkinter import *

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

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

  9. v1 = StringVar()
  10. v2 = StringVar()
  11. v3 = StringVar()

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

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

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

  30. mainloop()
复制代码


微信截图_20250715155251.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 16:06 | 显示全部楼层
在 grid 里,单元格的宽度默认由该列中最宽的控件决定——你的 Entry 大约有 80 px,而标签 “x”“=” 只有几个像素宽。

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

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

代码很简单,自己做!

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

  1. Label(f, text="x", width=4, anchor="center", bg="ghostwhite").grid(...)
复制代码

width 以字符为单位,同样能把列撑宽;不过用 grid_columnconfigure 更灵活,还能随窗口缩放保持居中。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-17 02:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表