我已经将许多QRadioButton分组到一个数组中
self.bounc1 = [self.bounc1_no, self.bounc1_1, self.bounc1_2, self.bounc1_3, self.bounc1_4, self.bounc1_5, self.bounc1_6]
self.bounc2 = [self.bounc2_no, self.bounc1_2, self.bounc2_2, self.bounc2_3, self.bounc2_4, self.bounc2_5, self.bounc2_6]
我必须返回一个列表,其中包含[40,已检查的电台1的索引,已检查的电台2的索引],我可以使用类似的代码
ret = [40, 0, 0]
for i in range(7):
if self.bounc1[i].isChecked(): ret[1] = i
for i in range(7):
if self.bounc2[i].isChecked(): ret[2] = i
self.sendSerial.emit(ret)
有没有办法像
那样在一行中制作它self.sendSerial.emit([40, ...... , ......])
谢谢
PS:我在Qt创建者it seems中将QRadioButton分组,没有一种简单的方法来设置ID。
答案 0 :(得分:1)
一行...:
self.sendSerial.emit([40, [i for i, x in enumerate(self.bounc1) if x.isChecked()][0], [i for i, x in enumerate(self.bounc2) if x.isChecked()][0]])
但是说实话,这是不太容易理解的方法。
结合@Bakuriu的评论,可以缩短这种情况的一种方法是:
self.sendSerial.emit([40] + list(map(lambda x: next(i for i, r in enumerate(x) if r.isChecked() if any(r.isChecked() for r in x) else 0, (self.bounc1, self.bounc2)))
同样,您可以看到它的作弊程度,尤其是默认值为0时。