Python 如何在Tkinter中设置窗口或框架内所有窗口小部件的填充

Python 如何在Tkinter中设置窗口或框架内所有窗口小部件的填充,python,tkinter,Python,Tkinter,我创建了一个有两个按钮的窗口,并设置了两个按钮的填充 from tkinter import * window = Tk() Button(window, text="Click Me").pack(padx=10, pady=10) Button(window, text="Click Me").pack(padx=10, pady=10) window.mainloop() 我想从pack()中删除padx和pady参数,并得到相同的结果。我该怎么做呢?你不能完全按照自己的意愿去做。没有

我创建了一个有两个按钮的窗口,并设置了两个按钮的填充

from tkinter import *

window = Tk()
Button(window, text="Click Me").pack(padx=10, pady=10)
Button(window, text="Click Me").pack(padx=10, pady=10)
window.mainloop()

我想从
pack()
中删除
padx
pady
参数,并得到相同的结果。我该怎么做呢?

你不能完全按照自己的意愿去做。没有用于定义
pack
的padx和pady值的全局配置,以消除调用
pack
时显式包含这些值的需要。不过,您可以将值放在变量中,这样,如果以后要更改值,只需在一个位置进行更改

padx = 10
pady = 10
Button(...).pack(padx=padx, pady=pady)
当然,您还可以定义自己的
pack
命令,该命令在每次调用时自动应用所需的任何值


几乎肯定有更好的方法来解决您的实际问题,但是对于问题中的人为示例,您最好在每次调用
pack()

时使用
padx
pady
参数,如果小部件位于框架或主
tk
窗口中,您可以执行以下操作:

for child in frame_name.winfo_children():
    child.grid_configure(padx=10, pady=10)

相关报道:@BryanOakley,这似乎符合要求,但你说不可能。我是不是遗漏了什么?@Felipe这个解决方案仍然会为每个单独的项目分配填充。我想@BrianOakley的意思是没有与
frame\u name.grid\u configure\u children(padx=10,pady=10)
@Felipe:这个问题专门问了如何在创建小部件时设置全局填充值而不指定它。我认为这也意味着他们不想在以后调用
pack\u configure
时指定它。
def pack_configure_recursive(widget, **kwargs):
    stack = list(widget.winfo_children())
    while stack:
        descendent = stack.pop()
        stack.extend(descendent.winfo_children())
        descendent.pack_configure(**kwargs)

...

pack_configure_recursive(window, padx=10, pady=10)