如何在Tkinter Grid布局的两列之间添加竖线?
解决Tkinter Grid布局两列间添加竖线的问题
嘿,我懂你想要的效果——在Grid布局的两列之间加一条竖线,而且不想用那些基于绝对坐标的笨方法,毕竟Grid就是要靠行列来灵活布局的对吧?给你两个完全适配Grid布局的可行方案,都不用手动算坐标:
方案1:使用ttk.Separator(推荐)
ttk模块里的Separator是专门用来做分隔线的原生组件,风格会和你的系统UI保持一致,而且能完美适配Grid布局的行列规则。
修改后的完整代码:
from tkinter import * from tkinter import ttk # 别忘了导入ttk模块 master = Tk() player1 = "A" player2 = "B" # 左侧NAME区域标签 Label(master, text="NAME", font=30).grid(row=0, column=0) Label(master, text=player1, font=30).grid(row=1, column=0) Label(master, text=player2, font=30).grid(row=2, column=0) # 添加垂直分隔线 separator = ttk.Separator(master, orient='vertical') # rowspan=3让分隔线覆盖3行,sticky='ns'让它上下拉伸填满高度,padx给点间距更美观 separator.grid(row=0, column=1, rowspan=3, sticky='ns', padx=5) # 右侧SCORE标签 Label(master, text="SCORE", font=30).grid(column=2, row=0) master.mainloop()
这个方案的好处是:系统原生风格、自动适配行高,完全基于Grid的行列逻辑,不需要任何坐标计算。
方案2:用Frame自定义竖线
如果不需要系统原生风格,想自己控制线条的颜色和宽度,可以用一个窄的Frame来实现,同样适配Grid布局:
完整代码:
from tkinter import * master = Tk() player1 = "A" player2 = "B" # 左侧NAME区域标签 Label(master, text="NAME", font=30).grid(row=0, column=0) Label(master, text=player1, font=30).grid(row=1, column=0) Label(master, text=player2, font=30).grid(row=2, column=0) # 自定义垂直竖线Frame vertical_line = Frame(master, width=2, bg='black') # width是线条宽度,bg是颜色 # 同样用rowspan和sticky让它填满3行的高度 vertical_line.grid(row=0, column=1, rowspan=3, sticky='ns', padx=5) # 右侧SCORE标签 Label(master, text="SCORE", font=30).grid(column=2, row=0) master.mainloop()
你可以根据需求调整width和bg参数,做出不同样式的竖线。
内容的提问来源于stack exchange,提问作者toto1105
相关产品推荐
相关产品推荐

