如何防止左对齐文本切入CTkFrame的边框?
解决CustomTkinter左对齐文本切入边框的问题
你遇到的问题是因为Label没有设置内边距,导致文本直接顶到了带边框的Frame边缘。下面是两种简单有效的解决方式:
方法一:给每个Label添加左右内边距
在pack()方法里加入padx参数控制文本与边框的左右间距,同时用pady调整行与行之间的垂直距离,代码修改如下:
import customtkinter as ctk window = ctk.CTk() ctk.set_appearance_mode('light') main_frame = ctk.CTkFrame(window, fg_color='white') main_frame.pack(fill=ctk.BOTH, expand=True) text_frame = ctk.CTkFrame(main_frame, fg_color='white', border_color='black', border_width=2) text_frame.pack_propagate(False) # 给带边框的Frame设置固定尺寸(pack_propagate(False)会禁用自动适配内容) text_frame.configure(width=400, height=200) text_frame.pack(side=ctk.TOP, padx=20, pady=20) # 添加Label时通过padx设置内边距,避免文本贴边框 hello_label = ctk.CTkLabel(text_frame, text="Hello, World!", font=('TkDefaultFont', 24), anchor='w', justify='left') hello_label.pack(fill='x', padx=10, pady=5) hello_label = ctk.CTkLabel(text_frame, text="Hello, World!", font=('TkDefaultFont', 24), anchor='w', justify='left') hello_label.pack(fill='x', padx=10, pady=5) hello_label = ctk.CTkLabel(text_frame, text="Hello, World!", font=('TkDefaultFont', 24), anchor='w', justify='left') hello_label.pack(fill='x', padx=10, pady=5) window.mainloop()
方法二:给外层Frame嵌套内层容器统一设置内边距
如果不想给每个Label单独设置padx,可以在带边框的text_frame内部嵌套一个无框的Frame,给这个内层Frame设置统一的内边距,再把所有Label放在内层Frame里:
import customtkinter as ctk window = ctk.CTk() ctk.set_appearance_mode('light') main_frame = ctk.CTkFrame(window, fg_color='white') main_frame.pack(fill=ctk.BOTH, expand=True) text_frame = ctk.CTkFrame(main_frame, fg_color='white', border_color='black', border_width=2) text_frame.pack_propagate(False) text_frame.configure(width=400, height=200) text_frame.pack(side=ctk.TOP, padx=20, pady=20) # 内层无框Frame,统一设置内边距 inner_frame = ctk.CTkFrame(text_frame, fg_color='white') inner_frame.pack(fill='both', expand=True, padx=10, pady=10) hello_label = ctk.CTkLabel(inner_frame, text="Hello, World!", font=('TkDefaultFont', 24), anchor='w', justify='left') hello_label.pack(fill='x', pady=5) hello_label = ctk.CTkLabel(inner_frame, text="Hello, World!", font=('TkDefaultFont', 24), anchor='w', justify='left') hello_label.pack(fill='x', pady=5) hello_label = ctk.CTkLabel(inner_frame, text="Hello, World!", font=('TkDefaultFont', 24), anchor='w', justify='left') hello_label.pack(fill='x', pady=5) window.mainloop()
注意:因为你设置了text_frame.pack_propagate(False),必须给text_frame设置固定的width和height,否则Frame会缩成最小尺寸,导致内容显示异常。
内容的提问来源于stack exchange,提问作者ohshitgorillas
相关产品推荐
相关产品推荐

