使NESTED tkinter框架小部件看起来像一帧

时间:2018-08-22 22:05:40

标签: python python-3.x tkinter overlay

是否有一种简单的方法来使嵌套框架看起来像一帧-最好使用网格布局管理器?当框架嵌套时(相对于框架是相同父窗口小部件的子级,请参见第二张图片),这相对容易实现。
问题是(1像素?)分离出现在 框架。消除这种情况,我的问题就消失了。

在第一个图像中,三个垂直线(嵌套框架的边缘边界)需要显示为一条线(相同的情况适用于图像底部的水平线)。期望的结果是一个包含3个(子)帧的(父)帧-第二个图像。

我有以下嵌套框架:Merge these tkinter frame boundaries,但需要使它们看起来像:Combined tkinter Frame Boundaries

顺便说一句,所有三个子框架都实现为框架,而不是按钮小部件。

我尝试使用“ padx”(零和负数),“救济”(设置为FLAT等)和borderwidth(设置为0和-1)窗口小部件属性没有成功。

我不愿意重新设计应用程序(使用Canvas和/或ttk.Separator)只是为了解决这个小而烦人的问题。消除嵌套不是一种可以接受的方法(除非绝对没有其他方法)。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

将内部框架的边界宽度设置为零,然后用ttk.Separator分隔它们,即可获得想要的外观。

enter image description here

产生以上图像的代码:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.geometry("250x200")

outer_frame = tk.Frame(root, borderwidth=2, relief="groove")
outer_frame.pack(side="top", fill="both", expand=True, padx=20, pady=20)

f1 = tk.Frame(outer_frame, borderwidth=0, highlightthickness=0)
f2 = tk.Frame(outer_frame, borderwidth=0, highlightthickness=0)
f3 = tk.Frame(outer_frame, borderwidth=0, highlightthickness=0)

tk.Label(f1, text="Child Frame 1").pack(fill="both", expand=True)
tk.Label(f2, text="Child Frame 2").pack(fill="both", expand=True)
tk.Label(f3, text="Child Frame 3").pack(fill="both", expand=True)

s1 = ttk.Separator(outer_frame, orient="horizontal")
s2 = ttk.Separator(outer_frame, orient="horizontal")

f1.pack(side="top", fill="both", expand=True)
s1.pack(side="top", fill="x", expand=False)
f2.pack(side="top", fill="both", expand=True)
s2.pack(side="top", fill="x", expand=False)
f3.pack(side="top", fill="both", expand=True)

root.mainloop()