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

如何在CustomTkinter弹窗中动态排列80个复选框?

解决CustomTkinter弹窗中复选框的网格布局问题

直接给你修改后的完整实现代码,同时拆解关键逻辑:

def open_secondary_window(self):
    # 创建弹窗窗口
    secondary_window = customtkinter.CTkToplevel()
    secondary_window.geometry("800x300")  # 调整窗口大小适配80个复选框
    secondary_window.title("Object Selection")

    # 创建滚动框架,容纳所有复选框(避免内容超出窗口)
    scroll_frame = customtkinter.CTkScrollableFrame(secondary_window)
    scroll_frame.pack(fill="both", expand=True, padx=10, pady=10)

    # 动态生成复选框,每10个换一列
    items_per_column = 10
    for i, class_name in enumerate(class_names):
        # 计算当前复选框的行和列:行号取模循环,列号整除递增
        row = i % items_per_column
        column = i // items_per_column
        # 创建复选框并布局到网格
        checkbox = customtkinter.CTkCheckBox(scroll_frame, text=class_name)
        checkbox.grid(row=row, column=column, padx=15, pady=5, sticky="w")

    # 创建关闭按钮,放在窗口底部居中
    button_close = customtkinter.CTkButton(
        secondary_window,
        text="Close window",
        command=secondary_window.destroy
    )
    button_close.pack(pady=10)

关键逻辑说明

  1. 网格布局核心
    用i % 10得到当前列的行号(0-9循环),i // 10得到列号(每10个自动加1),完美实现「每10个复选框切换到下一列并从第0行开始」的需求。
  2. 滚动容器适配
    80个复选框会超出固定窗口大小,用CTkScrollableFrame包裹所有复选框,内容超出时自动生成滚动条,避免布局挤压或内容丢失。
  3. 布局优化
    • 调整窗口初始大小为800x300,适配多列布局
    • 关闭按钮用pack放在底部居中,替代固定坐标的place,适配窗口大小变化
    • 给复选框添加padx和pady间距,提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:40:40