【发布时间】:2017-05-22 09:02:59
【问题描述】:
我正在尝试使用循环来创建多个复选框。我希望能够将这个盒子网格转换为一个 numpy 数组。该代码手动创建一个 5x5 复选框矩阵,对应于 numpy 数组中的同一点。当此代码运行并且用户选中框时,numpy 数组 always 打印如下:
[[False False False False False]
[False False False False False]
[False False False False False]
[False False False False False]
[False False False False True]]
我真的不知道怎么了。
import sys
from PyQt5.QtWidgets import (QWidget, QApplication, QPushButton, QCheckBox)
from PyQt5.QtCore import Qt
import numpy as np
class Example(QWidget):
def __init__(self):
super().__init__()
self.grid =np.zeros([5,5], dtype=bool)
self.x_pos, self.y_pos = 0, 0
self.initUI()
def initUI(self):
for i in range(5):
for j in range(5):
self.x_pos, self.y_pos = i, j
btn = QCheckBox(self)
btn.move(50+17*i, 50+17*j)
# btn.toggle()
btn.stateChanged.connect(self.click)
done = QPushButton('Done', self)
done.clicked.connect(self._print)
self.setGeometry(300, 300, 300, 200)
self.show()
def click(self, state):
if state == Qt.Checked:
self.grid[self.x_pos][self.y_pos] = True
else:
self.grid[self.x_pos][self.y_pos] = False
def _print(self):
print(self.grid)
【问题讨论】:
-
self.x_pos和self.y_pos在initUI()运行时更改,但之后您不会更改变量。因此,这两个变量保持[5,5],并且只有该位置的元素发生变化。您应该将可以跟踪实际复选框位置的数字分配给这两个变量。