【问题标题】:notebook widget - space between widgets笔记本小部件 - 小部件之间的空间
【发布时间】:2020-07-05 19:48:05
【问题描述】:

我正在尝试在笔记本顶部面板和 frame0\frame1\frame2 之间实现空间 为什么当我使用 pady 时,例如:

frame0.grid(row=0, column=0, pady=5)
frame1.grid(row=0, column=0, pady=5)
frame2.grid(row=0, column=0, pady=5)

但是没有变化..笔记本面板和框架粘在一起..为什么这里的pad不影响? (例如..我出于同样的原因添加了 main_frame 以在窗口和笔记本之间获得空间...将所有笔记本向下推)

import tkinter
import tkinter.ttk

window = tkinter.Tk()

main_frame = tkinter.ttk.Frame(window)

nb = tkinter.ttk.Notebook(main_frame)

frame0 = tkinter.ttk.Frame(nb)
frame1 = tkinter.ttk.Frame(nb)
frame2 = tkinter.ttk.Frame(nb)

lb0 = tkinter.ttk.Label(frame0, text= "Hello world")
lb1 = tkinter.ttk.Label(frame1, text= "One Two Three")
lb2 = tkinter.ttk.Label(frame2, text= "Test")

lb0.grid(row=0, column=0)
lb1.grid(row=1, column=0)
lb2.grid(row=2, column=0)

frame0.grid(row=0, column=0)
frame1.grid(row=0, column=0)
frame2.grid(row=0, column=0)

nb.add(frame0, text="tab0")
nb.add(frame1, text="tab1")
nb.add(frame2, text="tab2")

nb.grid(row=0, column=0)
main_frame.grid(row=0, column=0,pady=5)

window.mainloop()

【问题讨论】:

  • 笔记本需要分开还是要下移文字?
  • 分离(从外侧)并向下移动一点(在内部框架中)..
  • 不确定是否可行,但请尝试添加边框宽度。 bd=8
  • 嗯.. 但是在哪里?...
  • 尝试添加到nb.add 然后尝试添加到tkinter.ttk.Frame(nb)

标签: python python-3.x tkinter ttkwidgets


【解决方案1】:

因为您要将框架添加到笔记本中。对于这些帧,将忽略调用 grid 的结果。

add 方法接受一个可以有一到四个值的padding 选项。来自官方文档:

填充是最多四个长度规范的列表left top right bottom。如果指定的元素少于四个,则底部默认为顶部,右侧默认为左侧,顶部默认为左侧。

因此,要仅在顶部添加 20 像素的填充,您可以这样做:

nb.add(frame0, text="tab0", padding=(0, 20, 0, 0))
nb.add(frame1, text="tab1", padding=(0, 20, 0, 0))
nb.add(frame2, text="tab2", padding=(0, 20, 0, 0))

>为什么这里的稻谷没有影响?

【讨论】:

  • 完美的内部填充!但是因为我将框架附加到笔记本上,所以我无法将它们与标签分开?
  • 我刚刚通知我正在使用 Windows,当我运行程序时,添加的空间与默认的灰色背景颜色不同......有点烦人......
  • @eliran.n:不,您不能轻易地将框架与选项卡分开。这不是笔记本的工作方式。笔记本标签几乎普遍位于笔记本内部,而不是漂浮在内框架之上。如果您想要一个完全不同的笔记本外观,请考虑阅读如何为小部件创建自定义样式和自定义布局。
  • 知道了。但是我怎样才能得到均匀的颜色呢? padding=( ...) 添加的空间赋予不同的颜色 - 就像周围的白框。
【解决方案2】:

这里是 1 个标签的代码。我正在使用框架来添加间距。

import tkinter
import tkinter.ttk
from tkinter import *

window = tkinter.Tk()

tabControl = ttk.Notebook(window)

tab1 = ttk.Frame(tabControl)
tabControl.add(tab1, text='tab1')

Frame_1 = Frame(tab1, pady=8)
Frame_1.grid(row=1,column=0)


lb0 = Label(Frame_1, text= "Hello world")
lb0.grid(row=0, column=0)


tabControl.grid(row=0, column=0)

window.mainloop()

【讨论】:

  • 此示例不向笔记本添加框架。