下面是显示问题的代码。 Label1
表明我需要使用pady
将Label1
位移10个像素。 Label2
显示ipady
的默认效果。为什么ipady
不能在小部件的上方和下方留出空间?我如何让ipady
进行使用pady
的假设操作?谢谢。
引用tcl documentation:
-ipady金额
该数量指定要在从站的顶部和底部保留多少垂直内部填充。此空间已添加
在奴隶边界内。数量默认为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
并不能完全满足您的要求。诚然,文档在这一点上还不清楚。它不会添加相当于内部边距的值。取而代之的是,它只是向小部件的高度添加了许多像素,并且像素被添加在边框的内部而不是外部。它不会“阻止”这些像素被使用。
如果您的框架通常为20像素高(ipady=50
),则小部件现在将为120像素高(50 * 2 + 20)。在此框架内添加的任何小部件都可以使用框架内的所有空间。因此,当您使用grid
在第0行中放置某些内容时,它仍将出现在框架的最上方,紧挨边框的下方。
这正是我在您的代码中看到的。在我的机器上,不带ipady=50
的frame2最终高20像素。当我添加ipady=50
时,框架变为120像素高。由于标签已放置在零行中,因此它显示在框架的顶部。
TL; DR:不要以为ipady会说“我需要这么多的内部空白”,而是“我需要更多的内部空白”。
关于python - 为什么tkinter.grid()方法中的“ipady”选项仅在小部件下方添加空间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54264614/