Python 如何防止tkinter canvas';防止子窗口在画布滚动条上移动

Python 如何防止tkinter canvas';防止子窗口在画布滚动条上移动,python,canvas,tkinter,scrollbar,Python,Canvas,Tkinter,Scrollbar,我正在构建一个包含多个小部件的画布。滚动条工作正常,但是他们踩到了滚动条上,看起来不太好。是否可以使包含在画布中的子窗口不必点击滚动条? 我尝试在画布中添加一个框架,并将我的小部件添加到该框架中,但它遇到了一些其他问题 从tkinter导入* 从tkinter导入ttk 从tkinter导入消息框 类MainUI: 定义初始(自我,主): self.master=master self.content=ttk.Frame(self.master,padding=(3,3,12,12)) #第4

我正在构建一个包含多个小部件的画布。滚动条工作正常,但是他们踩到了滚动条上,看起来不太好。是否可以使包含在画布中的子窗口不必点击滚动条? 我尝试在画布中添加一个框架,并将我的小部件添加到该框架中,但它遇到了一些其他问题

从tkinter导入*
从tkinter导入ttk
从tkinter导入消息框
类MainUI:
定义初始(自我,主):
self.master=master
self.content=ttk.Frame(self.master,padding=(3,3,12,12))
#第4排
self.canvasFrame=ttk.Frame(self.content,borderwidth=5,relief=“sunken”)
self.canvasFrame.grid(行=0,列=0,列span=3,粘滞=W+E+N+S,pady=5,padx=15)
self.xscrollbar=滚动条(self.canvasFrame,orient=水平)
self.xscrollbar.grid(行=1,列=0,粘性=E+W)
self.yscrollbar=滚动条(self.canvasFrame)
self.yscrollbar.grid(行=0,列=1,粘性=N+S)
self.canvas=canvas(self.canvasFrame,bd=0,
#滚动区域=(0,0,1000,1000),
xscrollcommand=self.xscrollbar.set,
yscrollcommand=self.yscrollbar.set)
self.xscrollbar.config(命令=self.canvas.xview)
self.yscrollbar.config(命令=self.canvas.yview)
#列表框
self.listFrame=ttk.Frame(self.content,borderwidth=5,relief=“sunken”)
self.listFrame.grid(行=0,列=3,列span=2,粘性=W+E+N+S,pady=5,padx=15)
listYscrollbar=滚动条(self.listFrame)
grid(行=0,列=1,粘性=N+S)
self.actualCostlistbox=Listbox(self.listFrame)
self.actualCostlistbox.grid(行=0,列=0,粘性=W+E+N+S)
self.actualCostlistbox.config(yscrollcommand=listYscrollbar.set)
listYscrollbar.config(命令=self.actualCostlistbox.yview)
self.canvas.grid(行=0,列=0,粘性=N+S+E+W)
self.content.grid(列=0,行=0,粘性=(N,S,E,W))
self.master.grid_rowconfigure(0,权重=1)
self.master.grid\u列配置(0,权重=1)
self.content.grid_rowconfigure(0,权重=1)
self.content.grid\u columnconfigure(0,权重=1)
self.content.grid\u columnconfigure(1,权重=1)
self.content.grid\u columnconfigure(2,权重=1)
self.content.grid\u columnconfigure(3,权重=1)
self.canvasFrame.grid_rowconfigure(0,权重=1)
self.canvasFrame.grid\u columnconfigure(0,权重=1)
self.listFrame.grid\u rowconfigure(0,权重=1)
self.listFrame.grid\u columnconfigure(0,权重=1)
self.addEmpColumn()
self.canvas.configure(scrollregion=self.canvas.bbox(“全部”))
#事件绑定
self.canvas.bind(“,self.bind_到_鼠标滚轮)
self.canvas.bind(“,self.unbound\u to\u mouseweel)
def addEmpColumn(自):
self.empcomboxList=[]
self.empList=['a','b','c']
对于范围(1,30)内的i:
empCombo=ttk.Combobox(self.canvasFrame,
值=self.empList)
self.empcomboxList.append(empCombo)
self.canvas.create_窗口(5,i*25,anchor=NW,window=empCombo)
def鼠标滚轮(自身、事件):
如果self.yscrollbar.get()!=(0.0, 1.0):
self.canvas.yview_滚动(-1*int(event.delta/60),“单位”)
如果self.xscrollbar.get()!=(0.0, 1.0):
self.canvas.xview_滚动(-1*int(event.delta/60),“单位”)
def绑定到鼠标滚轮(自身、事件):
self.canvas.bind\u all(“,self.mouse\u wheel)
def未绑定鼠标滚轮(自身、事件):
self.canvas.unbind_all(“”)
def on_closing():
root.destroy()
root=Tk()
mainui=mainui(根)
根标题(“测试”)
协议(“WM_删除_窗口”,关闭时)
root.mainloop()

我认为问题在于:

def addEmpColumn(self):
    self.empComboBoxList = []
    self.empList=['a','b','c']
    for i in range(1, 30):
        empCombo =   ttk.Combobox(self.canvasFrame, 
                                              values=self.empList)
        self.empComboBoxList.append(empCombo)
        self.canvas.create_window(5, i * 25, anchor=NW, window=empCombo)
行中:

empCombo = ttk.Combobox(self.canvasFrame, values=self.empList)
它将组合框放置在画布的框架中,而不是画布中

empCombo = ttk.Combobox(self.canvas, values=self.empList)