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

如何用Python/PySide2为QGridLayout按5列一行循环添加元素?

解决QGridLayout每行5个元素的循环填充问题

你的核心问题是循环逻辑完全搞反了:原代码会把每个元素重复输出5次,还每次都重置行列计数,根本没按顺序逐个分配行列。

原代码

mylist =['thing001', 'thing002', 'thing003', 'thing004', 'thing005', 'thing006', 'thing007', 'thing008', 'thing009', 'thing010']

rowCount=0
colCount=0

def start():
   
    for each in mylist:
        i=0
        myThing = (str('btn_'+ each ))
        colCount=0
        rowCount=0
    
        #add a column until it reaches 5, then make a new row?
        for i in range(0,5):
            colCount += 1
            i+=1
            print ('Making Thing: ' + myThing +' | '+(str(rowCount)+':'+(str(colCount))))

        else:
            print('New Row!!!!!!!!!!!!!!!!!!!')
            colCount = 0
            rowCount += 1
            i+=1
                
start()

错误输出

Making Thing: btn_thing001 | 0:1
Making Thing: btn_thing001 | 0:2
Making Thing: btn_thing001 | 0:3
Making Thing: btn_thing001 | 0:4
Making Thing: btn_thing001 | 0:5
New Row!!!!!!!!!!!!!!!!!!!
Making Thing: btn_thing002 | 0:1
Making Thing: btn_thing002 | 0:2
Making Thing: btn_thing002 | 0:3
Making Thing: btn_thing002 | 0:4
Making Thing: btn_thing002 | 0:5
New Row!!!!!!!!!!!!!!!!!!!

期望输出

Making Thing: btn_thing001 | 0:1
Making Thing: btn_thing002 | 0:2
Making Thing: btn_thing003 | 0:3
Making Thing: btn_thing004 | 0:4
Making Thing: btn_thing005 | 0:5
New Row!!!!!!!!!!!!!!!!!!!
Making Thing: btn_thing006 | 1:1
Making Thing: btn_thing007 | 1:2
Making Thing: btn_thing008 | 1:3
Making Thing: btn_thing009 | 1:4
Making Thing: btn_thing010 | 1:5
New Row!!!!!!!!!!!!!!!!!!!

修正后的代码

核心逻辑是逐个遍历元素,跟踪当前行列数,每5个元素换一行:

mylist =['thing001', 'thing002', 'thing003', 'thing004', 'thing005', 'thing006', 'thing007', 'thing008', 'thing009', 'thing010']

def start():
    row_count = 0
    col_count = 0

    for idx, each in enumerate(mylist):
        my_thing = f'btn_{each}'
        # 列数从1开始计数,和你的期望输出一致
        current_col = col_count + 1
        print(f'Making Thing: {my_thing} | {row_count}:{current_col}')
        
        col_count += 1
        # 每5个元素换行,注意是idx+1因为enumerate从0开始
        if (idx + 1) % 5 == 0:
            print('New Row!!!!!!!!!!!!!!!!!!!')
            row_count += 1
            col_count = 0

start()

修正要点

  1. 把row_count和col_count放在函数内部初始化,避免全局变量干扰,也不会每次循环元素都重置
  2. 去掉多余的嵌套循环,直接逐个处理列表中的元素
  3. 用enumerate获取元素索引,方便判断是否达到每行的元素数量(5个)
  4. 每处理完一个元素,列数加1;当处理的元素总数是5的倍数时,换行重置列数,行数加1

运行修正后的代码,就能得到你想要的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:13:13