如何在CustomTkinter中调整按钮及按钮框架的尺寸?
解决CustomTkinter按钮与框架尺寸设置无效的问题
核心原因
你给按钮设置了pack(expand=True),这个参数会强制组件自动填充父容器的可用空间,直接覆盖手动设置的width和height参数。另外按钮框架的默认pack逻辑会随内部内容或窗口大小变化,导致框架尺寸设置失效。
具体修复步骤
1. 调整按钮的pack参数,取消自动扩展
移除按钮pack方法中的expand=True,改为expand=False,之后就能正常给按钮设置固定尺寸:
# 修改第一个按钮的pack语句 install_button1.pack(side="left", pady=40, padx=15, expand=False) # 修改第二个按钮的pack语句 install_button2.pack(side="left", pady=40, padx=15, expand=False)
然后在创建按钮时添加width和height参数:
install_button1 = ctk.CTkButton(button_frame, text="Installazione rapida", bg_color="transparent", fg_color="transparent", border_width=1, corner_radius=0, border_color="#9C92AD", text_color=("#F8F8F8", "gray90"), hover_color=("#9C92AD", "gray70"), command=install_addon_wrapper, width=200, height=50) # 自定义按钮尺寸
2. 固定按钮框架的尺寸
给按钮框架设置width和height,同时调整pack参数避免框架被拉伸,再通过pack_propagate(False)禁止框架随内部内容改变大小:
button_frame = ctk.CTkFrame(root, corner_radius=0, width=600, height=120) # 设置框架固定尺寸 button_frame.pack(pady=80, fill=None, expand=False) # 取消自动填充扩展 button_frame.configure(fg_color="transparent") button_frame.pack_propagate(False) # 锁定框架尺寸,不受内部组件影响
3. 完整修改后的代码示例
import customtkinter as ctk # 假设以下函数已定义 def install_addon_wrapper(): pass def install_drivers(): pass # Creazione della finestra principale root = ctk.CTk() root.title("CCE_tool") root.configure(fg_color="#282035") root.geometry("900x550") root.resizable(True, True) # Utilizza ctk.CTkLabel invece di ctk.CTkLabel per creare l'etichetta program_name = ctk.CTkLabel(root, text="C.C.E. Tool", font=('Avantstile Regular', 80), fg_color="transparent", text_color=("#FF79C6")) program_name.pack(pady=40) # Creazione di un frame per contenere i bottoni button_frame = ctk.CTkFrame(root, corner_radius=0, width=600, height=120) button_frame.pack(pady=80, fill=None, expand=False) button_frame.configure(fg_color="transparent") button_frame.pack_propagate(False) # Creazione del primo CustomButton install_button1 = root.main_button_1 = ctk.CTkButton(button_frame, text="Installazione rapida", bg_color="transparent", fg_color="transparent", border_width=1, corner_radius=0, border_color="#9C92AD", text_color=("#F8F8F8", "gray90"), hover_color=("#9C92AD", "gray70"), command=install_addon_wrapper, width=200, height=50) install_button1.pack(side="left", pady=40, padx=15, expand=False) # Creazione del secondo CustomButton install_button2 = ctk.CTkButton(button_frame, text="Installazione singoli componenti", bg_color="transparent", fg_color="transparent", border_width=1, corner_radius=0, border_color="#9C92AD", text_color=("#F8F8F8", "gray90"), hover_color=("#9C92AD", "gray70"), command=install_drivers, width=250, height=50) install_button2.pack(side="left", pady=40, padx=15, expand=False) root.mainloop()
内容的提问来源于stack exchange,提问作者Daniele Abruzzi
相关产品推荐
相关产品推荐

