如何用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()
修正要点
- 把
row_count和col_count放在函数内部初始化,避免全局变量干扰,也不会每次循环元素都重置 - 去掉多余的嵌套循环,直接逐个处理列表中的元素
- 用
enumerate获取元素索引,方便判断是否达到每行的元素数量(5个) - 每处理完一个元素,列数加1;当处理的元素总数是5的倍数时,换行重置列数,行数加1
运行修正后的代码,就能得到你想要的输出。
内容的提问来源于stack exchange,提问作者Septiflops
相关产品推荐
相关产品推荐

