tkinter 笔记本小部件框架限制

tkinter notebook widget frame limitation

我试图在一个选项卡中设置两个不同的框架,但是当我在互联网上的某处阅读时 笔记本小部件不可能。

我在放置按钮时遇到问题 - 例如 10 个按钮下方有 8 个按钮。 下面的按钮较小,并且在 x 轴上方的每个按钮之间有空 space.... 我不想跨越它们..我想要它们大小相同并将它们粘在中间。我用了网格..

我想使用不同的框架来做到这一点,然后每一行按钮都与另一行分开...... 但是笔记本小部件不可能,我说得对吗? 而且我认为使用 .place( x=, y= ) 它很烦人并且需要时间...

有什么建议可以简单地做到这一点吗?

import tkinter
import tkinter.ttk

window = tkinter.Tk()

nb = tkinter.ttk.Notebook(window)  
nb.grid(row=0, column=0, columnspan=10, rowspan=10)

frame = tkinter.Frame(nb)
frame.grid(row=0, column=0)

nb.add(frame, text = "Tab1")

button1 = tkinter.Button(frame, text="button1")
button2 = tkinter.Button(frame, text="button2")
button3 = tkinter.Button(frame, text="button3")

button4 = tkinter.Button(frame, text="button4")
button5 = tkinter.Button(frame, text="button5")
button6 = tkinter.Button(frame, text="button6")
button7 = tkinter.Button(frame, text="button7")
button8 = tkinter.Button(frame, text="button8")

button1.grid(row=0, column=0)
button2.grid(row=0, column=1)
button3.grid(row=0, column=2)
button4.grid(row=1, column=0)
button5.grid(row=1, column=1)
button6.grid(row=1, column=2)
button7.grid(row=1, column=3)
button8.grid(row=1, column=4)

window.mainloop()

在此示例中,按钮大小相同,但在我的代码中,rows=1 处的按钮大小不同,因为我将它们附加到 png 照片上..

当然可以在笔记本中放置多个框架。您必须使它们成为初始框架的子对象:

frame = tkinter.Frame(nb)
nb.add(frame, text = "Tab1")

frame1 = tkinter.Frame(frame)
frame1.pack(fill="both", expand="True")
frame2 = tkinter.Frame(frame)
frame2.pack(fill="both", expand="True")

然后您可以将按钮放在子框架内:

button1 = tkinter.Button(frame1, text="button1")
button2 = tkinter.Button(frame1, text="button2")
button3 = tkinter.Button(frame1, text="button3")

button4 = tkinter.Button(frame2, text="button4")
button5 = tkinter.Button(frame2, text="button5")
button6 = tkinter.Button(frame2, text="button6")
button7 = tkinter.Button(frame2, text="button7")
button8 = tkinter.Button(frame2, text="button8")

最后,您将不得不 fiddle 将按钮放置在它们自己的子框架中,因为您希望它们具有:

button1.grid(row=0, column=0)
button2.grid(row=0, column=1)
button3.grid(row=0, column=2)
button4.grid(row=1, column=0)
button5.grid(row=1, column=1)
button6.grid(row=1, column=2)
button7.grid(row=1, column=3)
button8.grid(row=1, column=4)

例如,这会使按钮居中。在子框架中,您也可以尝试使用其他几何管理器,如果它似乎更符合您的需要。