Файлы тут не при чем, вы бы объяснили, что кроссворд генерируется разный всегда и вам нужно перерисовывать. Проблема в том, что вы в createGrid создаете виджет, потом в __init__ его добавляете. Когда следующий раз вызывается createGrid, виджет создается, но не добавляется в главное окно. Создавать вид и сцену нужно один раз, а потом очищать только сцену!
def __init__(self):
...
self.prepareGrid()
self.createGrid()
...
def prepareGrid(self):
self.xxx = QtGui.QGroupBox("PREVIEW")
self.scen = QtGui.QGraphicsScene(0.0, 0.0, 15*20+6, 15*20+6)
self.scen.setBackgroundBrush(QtCore.Qt.white)
self.view = QtGui.QGraphicsView(self.scen)
layout = QtGui.QGridLayout()
layout.addWidget(self.view)
self.scen.setSceneRect(0, 0, 15*25+6, 15*25+6)
self.view.ensureVisible(0, 0, 10, 10)
self.xxx.setLayout(layout)
def createGrid(self):
self.scen.clear()
table = self.LoadGrid('setGrid.txt')
table2 = self.LoadGrid('setNumGrid.txt')
for i in range(len(table)):
for j in range(len(table[i])):
letter = table[i][j]
grid = table2[i][j]
item1 = Cell(3 + i * 25, 3 + j * 25, i, j)
if letter == "-":
item1.setBrush(QtCore.Qt.blue)
else:
item1.setBrush(QtCore.Qt.white)
if grid.isdigit():
item1.item2.setPlainText(grid)
item1.item3.setPlainText(letter)
self.scen.addItem(item1)