Tkinter中如何实现每行放指定数量控件,超量后自动换行布局
实现方案
你当前代码的核心问题是rownum在循环内被固定写死为50,且列索引直接取DataFrame字段值,没有做满3个换行的计数判断,才会导致所有按钮堆叠在同一行。
修改要点
- 在循环外单独维护两个布局计数变量:初始行号设为你需要的50,初始列号设为0
- 生成按钮时,使用自行维护的行号、列号作为
grid()方法的布局参数,不要直接用遍历取到的i值作为列索引,避免字段值不连续导致布局错位 - 每生成1个按钮,列号自增1;当列号累计到3时,将列号重置为0,同时行号增加30,后续按钮就会自动放到下一行
修改后可直接运行的代码
def widget_creator(): rownum = 50 colnum = 0 for i in df['Number of studs']: txt = 'stud' + str(i) ct.CTkButton(canvas, text=txt, corner_radius=10).grid( row=rownum, column=colnum, pady=100, padx=20, ipadx=100, ipady=90 ) # 计数判断是否换行 colnum += 1 if colnum >= 3: colnum = 0 rownum += 30 widget_creator()
补充提示:grid()布局的row和column参数是逻辑网格序号,不是像素坐标。如果运行后发现两行按钮间距过大,可以把行号增量从30调整为1(即逻辑上相邻的行),只通过pady参数控制按钮上下间距即可,不需要在行列序号之间留大段间隔。
内容的提问来源于stack exchange,提问作者ash2021
相关产品推荐
相关产品推荐

