You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除Tkinter/CustomTkinter中进度条与Entry组件的间距

问题:消除CustomTkinter中Entry与进度条的间距

我基于Tkinter和CustomTkinter修改了一个模板作为代码脚手架,原本计划添加表格,但首先需要完全消除Entry组件与进度条之间的间距。尝试调整sticky属性、内边距(pad)及行列参数后问题仍未解决。

原代码

import tkinter
import tkinter.messagebox
import customtkinter
import CTkTable

customtkinter.set_appearance_mode("System")  # Modes: "System" (standard), "Dark", "Light"
customtkinter.set_default_color_theme("blue")  # Themes: "blue" (standard), "green", "dark-blue"


class App(customtkinter.CTk):
    def __init__(self):
        super().__init__()

        # configure window
        self.title("GameBenchMark")
        self.geometry(f"{1100}x{580}")

        # configure grid layout (4x4)
        self.grid_columnconfigure(1, weight=1)
        self.grid_columnconfigure((2, 3), weight=0)
        self.grid_rowconfigure((0, 1, 2), weight=1)

        # create sidebar frame with widgets
        self.sidebar_frame = customtkinter.CTkFrame(self, width=140, corner_radius=0)
        self.sidebar_frame.grid(row=0, column=0, rowspan=4, sticky="nsew")
        self.sidebar_frame.grid_rowconfigure(4, weight=1)
        self.logo_label = customtkinter.CTkLabel(self.sidebar_frame, text="GameBenchMark", font=customtkinter.CTkFont(size=20, weight="bold"))
        self.logo_label.grid(row=0, column=0, padx=20, pady=(20, 10))
        self.appearance_mode_label = customtkinter.CTkLabel(self.sidebar_frame, text="Appearance Mode:", anchor="w")
        self.appearance_mode_label.grid(row=5, column=0, padx=20, pady=(10, 0))
        self.appearance_mode_optionemenu = customtkinter.CTkOptionMenu(self.sidebar_frame, values=["Light", "Dark", "System"],
                                                                       command=self.change_appearance_mode_event)
        self.appearance_mode_optionemenu.grid(row=6, column=0, padx=20, pady=(10, 10))

        # create main entry and button
        self.entry = customtkinter.CTkEntry(self)
        self.entry.grid(row=0, column=1, columnspan=1, padx=(20, 0), pady=(20, 20), sticky="new")

        self.main_button_1 = customtkinter.CTkButton(master=self, text='Search', fg_color="transparent", border_width=2, text_color=("gray10", "#DCE4EE"))
        self.main_button_1.grid(row=0, column=3, padx=(20, 20), pady=(20, 20), sticky="nw")

        # create slider and progressbar frame
        self.slider_progressbar_frame = customtkinter.CTkFrame(self, fg_color="transparent")
        self.slider_progressbar_frame.grid(row=1, column=1, padx=(10,0), pady=(10,0), sticky="new")
        self.slider_progressbar_frame.grid_columnconfigure(0, weight=1)
        self.slider_progressbar_frame.grid_rowconfigure(4, weight=1)
        self.progressbar_1 = customtkinter.CTkProgressBar(self.slider_progressbar_frame)
        self.progressbar_1.grid(row=1, column=0, padx=(10, 0), pady=(10, 0), sticky="new")
        self.progressbar_2 = customtkinter.CTkProgressBar(self.slider_progressbar_frame)
        self.progressbar_2.grid(row=2, column=0, padx=(10,0), pady=(10, 0), sticky="new")


        self.appearance_mode_optionemenu.set("Dark")
        self.progressbar_1.configure(mode="indeterminnate")
        self.progressbar_1.start()



    def change_appearance_mode_event(self, new_appearance_mode: str):
        customtkinter.set_appearance_mode(new_appearance_mode)




if __name__ == "__main__":
    app = App()
    app.mainloop()

界面效果

界面截图

解决方法

间距问题由三个原因导致:

  • Entry组件的底部内边距设置了20;
  • 进度条所在Frame的顶部内边距设置了10;
  • 主窗口给row0设置了weight=1,导致该行自动拉伸产生额外空间。

修改后的代码如下:

import tkinter
import tkinter.messagebox
import customtkinter
import CTkTable

customtkinter.set_appearance_mode("System")  # Modes: "System" (standard), "Dark", "Light"
customtkinter.set_default_color_theme("blue")  # Themes: "blue" (standard), "green", "dark-blue"


class App(customtkinter.CTk):
    def __init__(self):
        super().__init__()

        # configure window
        self.title("GameBenchMark")
        self.geometry(f"{1100}x{580}")

        # configure grid layout (4x4)
        self.grid_columnconfigure(1, weight=1)
        self.grid_columnconfigure((2, 3), weight=0)
        # 仅给需要拉伸的行设置weight,row0和row1不需要,避免自动撑开间距
        self.grid_rowconfigure((2, 3), weight=1)

        # create sidebar frame with widgets
        self.sidebar_frame = customtkinter.CTkFrame(self, width=140, corner_radius=0)
        self.sidebar_frame.grid(row=0, column=0, rowspan=4, sticky="nsew")
        self.sidebar_frame.grid_rowconfigure(4, weight=1)
        self.logo_label = customtkinter.CTkLabel(self.sidebar_frame, text="GameBenchMark", font=customtkinter.CTkFont(size=20, weight="bold"))
        self.logo_label.grid(row=0, column=0, padx=20, pady=(20, 10))
        self.appearance_mode_label = customtkinter.CTkLabel(self.sidebar_frame, text="Appearance Mode:", anchor="w")
        self.appearance_mode_label.grid(row=5, column=0, padx=20, pady=(10, 0))
        self.appearance_mode_optionemenu = customtkinter.CTkOptionMenu(self.sidebar_frame, values=["Light", "Dark", "System"],
                                                                       command=self.change_appearance_mode_event)
        self.appearance_mode_optionemenu.grid(row=6, column=0, padx=20, pady=(10, 10))

        # create main entry and button
        self.entry = customtkinter.CTkEntry(self)
        # 去掉Entry底部内边距,pady改为(20, 0)
        self.entry.grid(row=0, column=1, columnspan=1, padx=(20, 0), pady=(20, 0), sticky="new")

        self.main_button_1 = customtkinter.CTkButton(master=self, text='Search', fg_color="transparent", border_width=2, text_color=("gray10", "#DCE4EE"))
        self.main_button_1.grid(row=0, column=3, padx=(20, 20), pady=(20, 20), sticky="nw")

        # create slider and progressbar frame
        self.slider_progressbar_frame = customtkinter.CTkFrame(self, fg_color="transparent")
        # 去掉Frame顶部内边距,pady改为(0, 0)
        self.slider_progressbar_frame.grid(row=1, column=1, padx=(10,0), pady=(0,0), sticky="new")
        self.slider_progressbar_frame.grid_columnconfigure(0, weight=1)
        # 移除不需要的row配置,避免Frame内产生额外空间
        self.progressbar_1 = customtkinter.CTkProgressBar(self.slider_progressbar_frame)
        # 去掉进度条顶部内边距,pady改为(0, 0)
        self.progressbar_1.grid(row=1, column=0, padx=(10, 0), pady=(0, 0), sticky="new")
        self.progressbar_2 = customtkinter.CTkProgressBar(self.slider_progressbar_frame)
        # 调整进度条之间的间距,这里设置为0
        self.progressbar_2.grid(row=2, column=0, padx=(10,0), pady=(0, 0), sticky="new")


        self.appearance_mode_optionemenu.set("Dark")
        self.progressbar_1.configure(mode="indeterminate")  # 修正拼写错误:indeterminnate -> indeterminate
        self.progressbar_1.start()



    def change_appearance_mode_event(self, new_appearance_mode: str):
        customtkinter.set_appearance_mode(new_appearance_mode)




if __name__ == "__main__":
    app = App()
    app.mainloop()

主要修改点:

  1. 主窗口的grid_rowconfigure只给row2和row3设置weight=1,row0和row1不设置,避免自动拉伸;
  2. Entry的pady从(20,20)改为(20,0),移除底部内边距;
  3. 进度条Frame的pady从(10,0)改为(0,0),移除顶部内边距;
  4. 进度条的pady改为(0,0),消除进度条之间的间距;
  5. 修正了进度条模式的拼写错误(indeterminnate改为indeterminate)。

内容的提问来源于stack exchange,提问作者silentmort

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:54:55