如何在CustomTkinter中调整网格列宽度以缩减控件占用空间?
解决CustomTkinter输入框与按钮列过宽的问题
CustomTkinter的控件自带默认最小尺寸,单纯调整列的weight或minsize不会生效,得从控件本身和布局参数入手:
- 直接指定控件宽度:给输入框和按钮设置
width参数,强制缩小控件本身的宽度,避免它占用多余空间。 - 减少列间距:通过
grid的padx参数缩小列之间的空隙,防止列被间距撑开。 - 限制容器扩展:给承载控件的Frame设置合适的
pack参数,避免容器自动拉伸导致列宽变大。
修改后的代码示例:
import customtkinter as ctk # Create a tkinter window window = ctk.CTk() # Create a frame for options - 限制frame不自动扩展 opts_frame = ctk.CTkFrame(window) opts_frame.pack(fill="x", expand=False, padx=10, pady=10) # Define variables blank_window = ctk.IntVar() smoothing = ctk.DoubleVar() iterations = ctk.IntVar() bootstraps = ctk.IntVar() blank_window.set(0) smoothing.set(0.1) iterations.set(3) bootstraps.set(100) # Create labels ctk.CTkLabel(opts_frame, text='Window Size:').grid(row=0, column=0, sticky='w', padx=(0, 5)) ctk.CTkLabel(opts_frame, text='Smoothing:').grid(row=1, column=0, sticky='w', padx=(0, 5)) ctk.CTkLabel(opts_frame, text='Iterations:').grid(row=2, column=0, sticky='w', padx=(0, 5)) ctk.CTkLabel(opts_frame, text='Bootstraps:').grid(row=3, column=0, sticky='w', padx=(0, 5)) # Create entry fields - 指定输入框宽度 window_entry = ctk.CTkEntry(opts_frame, textvariable=blank_window, width=60) smooth_entry = ctk.CTkEntry(opts_frame, textvariable=smoothing, width=60) iter_entry = ctk.CTkEntry(opts_frame, textvariable=iterations, width=60) boot_entry = ctk.CTkEntry(opts_frame, textvariable=bootstraps, width=60) window_entry.grid(row=0, column=1, padx=(0, 5)) smooth_entry.grid(row=1, column=1, padx=(0, 5)) iter_entry.grid(row=2, column=1, padx=(0, 5)) boot_entry.grid(row=3, column=1, padx=(0, 5)) # Create increase and decrease functions def increase_window(): blank_window.set(blank_window.get() + 1) def decrease_window(): blank_window.set(blank_window.get() - 1) # Create buttons - 指定按钮宽度 inc_button = ctk.CTkButton(opts_frame, text="+", command=increase_window, width=30) dec_button = ctk.CTkButton(opts_frame, text="-", command=decrease_window, width=30) inc_button.grid(row=0, column=2, padx=(0, 2)) dec_button.grid(row=0, column=3) # Start the ctkinter event loop window.mainloop()
关键改动说明:
- 给所有
CTkEntry添加width=60,压缩输入框宽度; - 给
CTkButton添加width=30,缩小按钮尺寸; - 在
grid布局中添加padx参数,减少控件和列之间的空隙; - 给
opts_frame的pack设置fill="x", expand=False,限制Frame不会无限制拉伸。
内容的提问来源于stack exchange,提问作者ohshitgorillas
相关产品推荐
相关产品推荐

