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

umuewwlo  于 2023-01-16  发布在  Python
关注(0)|答案(4)|浏览(251)

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

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()中删除padxpady参数并得到相同的结果。我该怎么做?

sg24os4d

sg24os4d1#

如果小部件位于框架或主tk窗口中,您可以执行以下操作:

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

icomxhvb2#

你不能完全按照自己的意愿去做。没有全局配置来定义pack的padx和pady值,这样就不需要在调用pack时显式地包含这些值。不过,你可以把这些值放在variable中,这样如果你以后想修改这些值,你只需要在一个地方修改它。

padx = 10
pady = 10
Button(...).pack(padx=padx, pady=pady)

当然,您也可以定义自己的pack命令,在每次调用它时自动应用您想要的任何值。
几乎可以肯定有更好的方法来解决您的实际问题,但是对于问题中的人为示例,您所能做的最好的是在每次调用pack()时使用padxpady参数。

cigdeys3

cigdeys33#

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)
mmvthczy

mmvthczy4#

您可以将Button子类化并重新定义pack()方法:

import tkinter as tk
from tkinter import ttk

class MyButton(ttk.Button):
    def pack(self, *args, **kwargs):
        super().pack(padx=10, pady=10, *args, **kwargs)

root=tk.Tk()
MyButton(text="Hello").pack()
MyButton(text="World").pack()
root.mainloop()

相关问题