В вашем случае, ipadx
не сбой. Он работает как задумано, просто то, как он работает, не очень интуитивно понятно, особенно когда вы применяете его к кадру.
Чтобы лучше визуализировать происходящее, давайте применим значение ipadx
к кнопке, а не к рамке. Таким образом, мы можем видеть отступ относительно метки на кнопке.
Например, добавьте две кнопки вместо одной. Дайте одному ipadx
из 20, а другому ipadx
= 0.
button1 = ttk.Button(inner_frame, text='this is a button')
button2 = ttk.Button(inner_frame, text='this is a button')
button1.grid(row=0, column=0, ipadx=20)
button2.grid(row=1, column=0, ipadx=0)
Обратите внимание, что кнопка с ipadx=20
шире, и дополнительное пространство находится внутри кнопки, а некак поле вокруг кнопки.

То же самое происходит с inner_frame
: когда он добавляется к своему родителю, дополнительное пространстводобавляется внутри рамки, эффективно увеличивая inner_frame
. Вы не можете видеть его, потому что он добавлен в пустое пространство уже внутри фрейма.
Вот важная часть: если вы добавляете виджет в inner_frame
, grid
ничего не знает о значениях ipadx
, применяемых к inner_frame
- эта опция ipadx
применяется только кinner_frame
и его родитель , а не его дети. В момент добавления виджетов внутри inner_frame
, grid
знает только, что inner_frame
имеет ширину X пикселей.
Чтобы проиллюстрировать это, мы можем добавить ярлык к кнопке, аналогично тому, как ваш исходный код добавляет кнопку в рамку. (примечание: мы отключим распространение геометрии, чтобы кнопка не уменьшалась).
button1.grid_propagate(False)
label = ttk.Label(button1, text="x")
label.grid(row=0, column=0)
Вы должны увидеть окно, которое выглядит примерно так:

Видите, как "х" находится на крайнем левом краю кнопки? Это потому, что он ничего не знает о значении ipadx
, примененном к его родителю. Все, что он знает, это то, что кнопка является виджетом X пикселей, и она должна быть на левом краю кнопки.
Это то, что происходит с вашей оригинальной рамкой и кнопкой - кнопка добавляется внутрирама, используя все пространство внутри рамы.