见下面 红色的正确答案
我正在使用tkinter
构建一个非常简单的用户界面,我正在使用一些文本字段,但它们似乎忽略了底部和右侧边缘\斜角(不确定正确的术语)。
这个小部件似乎有足够的空间来呈现,我在这里发帖是想看看这是预期的行为还是一个常见的\容易解决的问题。
我正在使用网格布局,并将小部件放入页面中,如下所示:
runway_data_label.grid(row=3, column=0, sticky="w")
runway_data_text = tk.Text(load_frame, height=1, width=50, bg="light grey")
runway_data_text.grid(row=3, column=1, sticky="w")
runway_data_text.config(state=tk.DISABLED)
这是一个屏幕截图,显示了我所说的内容。有些小部件的背景是灰色的,有些是白色的,但两者的效果都很明显,无论我给小部件的大小,我都用蓝色在效果最明显的地方画了下划线。
下面是一个最小的可复制示例,您可以看到文本字段缺少底部和右边缘:
root = tk.Tk()
root.resizable(False,False)
root.title("Test")
root.geometry("600x600")
tab_control = ttk.Notebook(root)
tab_control.pack(expand = 1, fill ="both")
style = ttk.Style()
style.theme_use("default")
style.configure("TFrame", background="white")
style.configure("TLabel", background="white", font=("URW Gothic L", "10", "bold"))
style.configure("TButton", font=("URW Gothic L", "10", "bold"))
style.configure("TNotebook.Tab", background="grey", font=("URW Gothic L","10"))
style.map("TNotebook.Tab", background=[("selected", "white")], font=[("selected", "bold")])
load_tab = ttk.Frame(tab_control)
load_frame = ttk.Frame(load_tab, padding=(8,8,12,12))
airport_data_label = ttk.Label(load_frame, text="Data", width=15, anchor="w")
airport_data_label.grid(row=1, column=0, sticky="w")
airport_data_text = tk.Text(load_frame, height=1, width=50, bg="light grey")
airport_data_text.grid(row=1, column=1, sticky="w")
airport_data_text.config(state=tk.DISABLED)
airport_data_btn = tk.Button(load_frame, text="Open", command=lambda: print("Hello")).grid(row=1, column=2, sticky="w")
load_frame.pack()
tab_control.add(load_tab, text="Load Data")
root.mainloop()
以下是MRE的屏幕截图:
在仔细观察了所有的
reliefs
之后,我意识到其中一些(raised
,sunken
,ridge
,groove
)通过在一些边缘添加阴影,为边界提供了3D外观。这会产生一些边缘缺失的错觉。另一方面,
solid
添加了一个统一的2D边框,flat
添加了一个与小部件背景颜色相同的平面边框。Solution:
如果希望所有边都可见,可以使用
solid
浮雕。此外,还可以通过更改bd
的值来更改边框厚度。airport_data_text = tk.Text(load_frame, height=1, width=50, bg="light grey", relief = "solid", bd = 1)