下面是显示问题的代码。 Label1表明我需要使用padyLabel1位移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/

10-10 11:05