使用网格和框架包装

2024-10-01 13:43:19 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以在一个框架中使用网格,然后在根窗口中打包?例如:

from Tkinter import *
import ttk as ttk
root = Tk()
text = Text(root)

buttonsFrame = Frame(root)
start = Button(buttonsFrame)
start["text"] = "Start"
start.grid(row = 0, column=1)
stop = Button(buttonsFrame, )
stop["text"] = "Stop"
stop.grid(row = 0, column=3)
buttonsFrame.pack(side=TOP)

tabbedPane = ttk.Notebook(root)

raw =  ttk.Frame(tabbedPane)
interpreted =  ttk.Frame(tabbedPane)
text = Text(raw)
text.pack(fill=BOTH, expand=1, side=TOP)

textInterpreted = Text(interpreted)
textInterpreted.pack(fill=BOTH, expand=1, side=TOP)

tabbedPane.add(raw, text="RAW")
tabbedPane.add(interpreted, text="Application")
tabbedPane.pack(fill=BOTH, expand=1, side=TOP)
checkBoxesFrame = Frame(root)
stkCheck = Checkbutton(checkBoxesFrame, text="STK/CAT")
stkCheck.pack(side=LEFT)
stkFile = Checkbutton(checkBoxesFrame, text="File IO")
stkFile.pack(side=LEFT)
stkAuth = Checkbutton(checkBoxesFrame, text="Auth")
stkAuth.pack(side=LEFT)
checkBoxesFrame.pack()

root.mainloop()

因为我想要按钮之间的间距,所以为什么它使用不同的列。有可能这样做吗?在


Tags: textrawtoprootframestartsidepack
1条回答
网友
1楼 · 发布于 2024-10-01 13:43:19

是的,有可能。事实上,这是构建复杂gui的推荐方法。在

我想你误会的是:每个有网格管理的子控件都有自己的“网格”。此网格不能保证与应用程序中可能使用的任何其他网格对齐。没有通用的列或行集。框架A中的列1很可能位于框架B中列10的右侧,而框架A中的第1行可能位于框架B中第1行的下方

在您的特定情况下,您将在顶部打包按钮框,但由于您没有指定任何选项,它将填充父窗口的宽度。它将试图尽可能小,并在其母公司的中上部分。在

当你把两个小部件放在那里时,框架会膨胀到足以容纳这些部件。该帧的第0列为空,宽度为零;第1列为开始按钮宽度;第2列为空,宽度为零;第3列为停止按钮宽度。如果您希望它们之间有空间,一个简单的解决方案是强制第2列为特定的大小(例如:buttonsFrame.grid_columnconfigure(2, minsize=100);

当你试图解决布局问题时,它可以帮助你的一些小部件赋予独特的背景颜色,使它们显得与众不同。例如,如果给buttonsFrame一个粉红色的背景,你很快就会发现它并没有填满整个窗口的宽度。在

相关问题 更多 >