为什么 tkinter.grid() 方法中的 'ipady' 选项只在小部件下面添加 space?
Why does the 'ipady' option in the tkinter.grid() method only add space below a widget?
下面是显示问题的代码。 Label1
表明我需要使用 pady
将 Label1
位移 10 个像素。 Label2
显示ipady
的默认效果。为什么 ipady
不在小部件上方和下方留下 space?我如何使用 pady
让 ipady
做它应该做的事情 w/o?谢谢。
-ipady amount
The amount specifies how much vertical internal padding to leave on the top and bottom of the slave(s). This space is added
inside the slave(s) border. The amount defaults to 0.
import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
s = ttk.Style()
s.configure('one.TFrame', background='light blue', relief='raised',borderwidth=10)
s.configure('two.TFrame', background='light green', relief='sunken', borderwidth=10)
frame1 = ttk.Frame(root,style='one.TFrame')
frame1.grid(row=0, column=0, sticky='nsew', ipady=10,)
label1 = ttk.Label(frame1, text='Label1')
label1.grid(sticky='nsew',padx=10, pady=10,)
frame2 = ttk.Frame(frame1,style='two.TFrame')
frame2.grid(row=1, column=1, sticky='nsew', ipady=50,)
label2 = ttk.Label(frame2, text='Label2')
label2.grid()
我不认为 ipady
完全符合您的想法。不可否认,文档在这一点上有点不清楚。它不会添加相当于内部边距的内容。相反,它只是将那么多像素添加到小部件的高度,并且这些像素被添加到边框的内侧而不是外侧。它不会 "block off" 这些像素被使用。
如果您的框架通常为 20 像素高,使用 ipady=50
,您的小部件现在将为 120 像素高 (50*2 + 20)。添加到此框架内的任何小部件都能够使用框架内的所有 space。因此,当您使用 grid
在第 0 行放置某些内容时,它仍会出现在框架的最顶部,恰好在边框下方。
这正是我在您的代码中看到的。在我的机器上,没有 ipady=50
的 frame2 最终是 20 像素高。当我添加 ipady=50
时,框架变为 120 像素高。标签出现在框架的最顶部,因为它已被放置在第 0 行。
TL;DR:不要认为 ipady 是在说 "I need this much of an inside margin",而是 "I need this much more extra space inside"。
下面是显示问题的代码。 Label1
表明我需要使用 pady
将 Label1
位移 10 个像素。 Label2
显示ipady
的默认效果。为什么 ipady
不在小部件上方和下方留下 space?我如何使用 pady
让 ipady
做它应该做的事情 w/o?谢谢。
-ipady amount
The amount specifies how much vertical internal padding to leave on the top and bottom of the slave(s). This space is added inside the slave(s) border. The amount defaults to 0.
import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
s = ttk.Style()
s.configure('one.TFrame', background='light blue', relief='raised',borderwidth=10)
s.configure('two.TFrame', background='light green', relief='sunken', borderwidth=10)
frame1 = ttk.Frame(root,style='one.TFrame')
frame1.grid(row=0, column=0, sticky='nsew', ipady=10,)
label1 = ttk.Label(frame1, text='Label1')
label1.grid(sticky='nsew',padx=10, pady=10,)
frame2 = ttk.Frame(frame1,style='two.TFrame')
frame2.grid(row=1, column=1, sticky='nsew', ipady=50,)
label2 = ttk.Label(frame2, text='Label2')
label2.grid()
我不认为 ipady
完全符合您的想法。不可否认,文档在这一点上有点不清楚。它不会添加相当于内部边距的内容。相反,它只是将那么多像素添加到小部件的高度,并且这些像素被添加到边框的内侧而不是外侧。它不会 "block off" 这些像素被使用。
如果您的框架通常为 20 像素高,使用 ipady=50
,您的小部件现在将为 120 像素高 (50*2 + 20)。添加到此框架内的任何小部件都能够使用框架内的所有 space。因此,当您使用 grid
在第 0 行放置某些内容时,它仍会出现在框架的最顶部,恰好在边框下方。
这正是我在您的代码中看到的。在我的机器上,没有 ipady=50
的 frame2 最终是 20 像素高。当我添加 ipady=50
时,框架变为 120 像素高。标签出现在框架的最顶部,因为它已被放置在第 0 行。
TL;DR:不要认为 ipady 是在说 "I need this much of an inside margin",而是 "I need this much more extra space inside"。