如何消除Tkinter Canvas.create_window()生成的2像素边框?
解决Tkinter内嵌Canvas的2像素边框问题
嘿,这个问题我之前也碰到过!你看到的2像素边框其实是Tkinter Canvas组件默认的高亮边框(highlightthickness),默认值就是2像素,用来在组件获得焦点时突出显示。要消除它很简单,只需要在创建内嵌Canvas的时候显式关闭这个属性就行。
解决方案
在创建c_inner和c_inner2时,添加highlightthickness=0和bd=0(bd是边框宽度,确保彻底移除所有边框样式),另外注意你的原代码里w.mainloop()写在了窗口创建之前,这会导致代码无法正常运行,我也一并调整了顺序:
import tkinter as tk w = tk.Tk() f = tk.Frame(w, width=300, height=300, bg='yellow') f.pack() c_outer = tk.Canvas(f, width=20, height=20, bg='red') c_outer.pack() # 移除内嵌Canvas的高亮边框和普通边框 c_inner = tk.Canvas(c_outer, width=10, height=10, bg='blue', highlightthickness=0, bd=0) c_outer.create_window(0, 0, anchor=tk.NW, window=c_inner) # 同样处理第二个内嵌Canvas c_inner2 = tk.Canvas(c_outer, width=10, height=10, bg='green', highlightthickness=0, bd=0) c_outer.create_window(10, 10, anchor=tk.NW, window=c_inner2) w.mainloop()
补充说明
highlightthickness:控制组件获得焦点时的高亮边框宽度,设为0就能完全隐藏它bd(borderwidth的简写):控制组件的普通边框宽度,默认是2,设为0确保没有额外边框
这样修改之后,内嵌的蓝色和绿色Canvas就会完全贴合外层红色Canvas,不会再有讨厌的2像素边框啦!
内容的提问来源于stack exchange,提问作者Pepa
相关产品推荐
相关产品推荐

