如何防止 python 中的两个 canvas 之间出现间隙

How to prevent a gap between two canvas in python

此代码在 window 中生成两个画布。但是 Python 不会将它们一个接一个地粘在一起,而是在它们之间放置一个间隙。当我调整 window.

的大小时,这个差距变得更大
from Tkinter import *

class App:
    def __init__(self,master):

       master.title('Python Canvas Testing')
       master.minsize(width=550, height=450)

       settingscanvas = Canvas(master,bg="yellow")
       settingscanvas.pack(side='top',anchor='nw',expand=True,fill='x')

       datacanvas = Canvas(master,bd=1,bg="green")
       datacanvas.pack(side='top',anchor='nw',expand=True,fill='both')

       for r in xrange(15):
          Label(settingscanvas, text='Label'+str(r+1)).grid()

       Label(datacanvas, text='Label 2').grid()

## create main program window
window = Tk()

## create window container
app = App(window)

mainloop()

有什么我想念的选项,可以将两个画布粘在一起,这样就没有缝隙了吗?

两个小部件的 expand 设置为 True,因此它们各自分配了一些额外的 space。如果您只想让一个人获得额外的 space,请将另一个人的 expand 设置为 False。如果你想让它们都得到一些额外的 space,一定要设置 fill 以包括 y 方向。

我不知道如何让它与 pack 一起工作。但是您可以使用网格管理器来完成。要拥有带网格的可扩展小部件,您需要设置两件事。首先,"sticky" 参数允许小部件填充网格中其单元格内的 space('ew' 水平填充,'nsew' 双向填充)。其次,列 and/or 行的权重参数如果为正则使其可消耗。

from tkinter import *

class App:
    def __init__(self,master):
       master.title('Python Canvas Testing')
       master.minsize(width=550, height=450)

       settingscanvas = Canvas(master,bg="yellow")
       settingscanvas.grid(sticky='ew')

       datacanvas = Canvas(master,bd=1,bg="green")
       datacanvas.grid(sticky='nsew')

       master.grid_rowconfigure(1,weight=1)
       master.grid_columnconfigure(0, weight=1)

       for r in range(15):
          Label(settingscanvas, text='Label'+str(r+1)).grid()

       Label(datacanvas, text='Label 2').grid()

## create main program window
window = Tk()

## create window container
app = App(window)

mainloop()