Python Tkinter画布';边框与“创建”窗口创建的窗口重叠&x27;

Python Tkinter画布';边框与“创建”窗口创建的窗口重叠&x27;,python,canvas,tkinter,border,overlap,Python,Canvas,Tkinter,Border,Overlap,我正在使用tkinter制作一个滚动画布。当我通过create\u window链接一个比画布大的框架来创建一个窗口时,窗口将与画布的边框重叠 将Tkinter作为tk导入 类滚动画布(对象): “”“在框架中显示表的小部件”“” def uuu init uuu(self,parent=None): self.parent=parent self.frame=tk.frame(self.parent,bd=3, 卸压=槽) self.frame.pack(fill=tk.BOTH,expand

我正在使用tkinter制作一个滚动画布。当我通过
create\u window
链接一个比画布大的框架来创建一个窗口时,窗口将与画布的边框重叠

将Tkinter作为tk导入
类滚动画布(对象):
“”“在框架中显示表的小部件”“”
def uuu init uuu(self,parent=None):
self.parent=parent
self.frame=tk.frame(self.parent,bd=3,
卸压=槽)
self.frame.pack(fill=tk.BOTH,expand=1)
self.frame.grid_rowconfigure(0,权重=1)
self.frame.grid\u columnconfigure(0,权重=1)
self.xscrollbar=tk.Scrollbar(self.frame,orient=tk.HORIZONTAL)
self.yscrollbar=tk.Scrollbar(self.frame,orient=tk.VERTICAL)
self.canvas=tk.canvas(self.frame,bg='#006666',
bd=10,卸压=tk.槽,
xscrollcommand=self.xscrollbar.set,
yscrollcommand=self.yscrollbar.set)
self.xscrollbar.grid(行=1,列=0,粘性=tk.W+tk.E)
self.yscrollbar.grid(行=0,列=1,粘性=tk.N+tk.S)
self.canvas.grid(行=0,列=0,粘滞=tk.W+tk.E+tk.N+tk.S)
self.xscrollbar.config(命令=self.canvas.xview)
self.yscrollbar.config(命令=self.canvas.yview)
self.table=tk.Frame(self.canvas,bd=5,relief=tk.SOLID,
宽度=400,高度=200)
self.canvas.create_窗口(0,0,anchor=tk.CENTER,window=self.table)
self.canvas.update_idletasks()
self.canvas.config(scrollregion=self.canvas.bbox(tk.ALL))
def main():
app=tk.tk()
应用几何(“400x300”)
框架=tk.框架(应用,宽度=50,高度=50)
帧。传播(0)
frame.pack(fill=tk.BOTH,expand=1)
mytable=ScrollCanvas(父项=frame)
app.mainloop()
main()
结果如下:(红色框)


有人知道如何解决这个问题吗?

奇怪的是,画布边框是绘图空间的一部分,因此在画布上绘制的任何东西都有可能与边框重叠


我使用的解决方案是从画布中删除边框,然后将画布放入具有边框的框架中。从视觉上看,它看起来是一样的,但由于可见边框属于另一个小部件,因此画布中的项目不可能与之重叠。

您可以通过将状态设置为隐藏以及需要将其设置回正常状态来解决此问题

import tkinter

...
...

canvas = tkinter.Canvas(self, width=100, height=100, bd=0, highlightthickness=0)
canvas.pack()

btn = tkinter.Button(text="Click me", command=print)

win = canvas.create_window(10, 10, anchor=tkinter.NW, window=btn)

canvas.itemconfigure(win, state=tkinter.HIDDEN)

...
...

谢谢你的回答。把画布放在一个框架中确实可以避免这个问题。但是为什么画布边框是绘图空间的一部分?@xyz:为什么?我不知道。这一决定可能是20多年前作出的。