FishHookСпасибо, быстро и оперативно
Вот твоя ошибка
![](/static/djangobb_forum/img/smilies/wink.png)
FishHookСпасибо, быстро и оперативно
Вот твоя ошибка
def createGrid(self,data, data2): self.ce = [] self.scen = QtGui.QGraphicsScene(0.0, 0.0, 10*20+6, 10*20+6) self.scen.setBackgroundBrush(QtCore.Qt.white) self.view = QtGui.QGraphicsView(self.scen) self.xxx = QtGui.QGroupBox("PREVIEW") table = [line.split() for line in data.splitlines() if line] table2 = [line.split() for line in data2.splitlines() if line] layout = QtGui.QGridLayout() layout.addWidget(self.view) for i, table in enumerate(table): for j, table in enumerate(table): for i, table2 in enumerate(table2): for j, table2 in enumerate(table2): if (table == table and table2 == "-"): item1 = Cell(3 + j * 25, 3 + i * 25, i, j) item1.setBrush(QtCore.Qt.blue) item1.item2.setPlainText("") item1.item3.setPlainText("") self.scen.addItem(item1) if (table == table and table2 == "+"): item1 = Cell(3 + j * 25, 3 + i * 25, i, j) item1.setBrush(QtCore.Qt.white) item1.item2.setPlainText("") item1.item3.setPlainText(table) self.scen.addItem(item1) if table == table and table2 >= "1": item1 = Cell(3 + j * 25, 3 + i * 25, i, j) item1.setBrush(QtCore.Qt.white) item1.item2.setPlainText(table2) item1.item3.setPlainText(table) self.scen.addItem(item1) self.scen.setSceneRect(0, 0, 10*25+6, 10*25+6) self.view.ensureVisible(0, 0, 10, 10) self.xxx.setLayout(layout)
def buttonGenClick(self): a = crossword.Crossword(10, 10, '-', 5000, crossword.word_list) a.compute_crossword(2) sys.stdout = open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setLableWorld.txt', "w" ) print a.word_bank() sys.stdout = open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setGrid.txt', "w" ) print a.solution() #print a.word_find() sys.stdout = open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setNumGrid.txt', "w" ) print a.display() sys.stdout = open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setQuare.txt', "w" ) print a.legend() sys.stdout = open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setNumQuare.txt', "w" ) print len(a.current_word_list), 'out of', len(crossword.word_list) #print a.debug self.createGrid(test_string,test_string1) self.createLable(test_string2)
if __name__ == '__main__': with open('C:/Users/INTJOGE/Desktop/PyCross/OutFile/setGrid.txt') as f: test_string = f.read() with open('C:/Users/INTJOGE/Desktop/PyCross/OutFile/setNumGrid.txt') as f: test_string1 = f.read() with open('C:/Users/INTJOGE/Desktop/PyCross/OutFile/setLableWorld.txt') as f: test_string2 = f.read() import sys app = QtGui.QApplication(sys.argv) dialog = Dialog() sys.exit(dialog.exec_())
for i, (row1, row2) in enumerate(zip(table1, table2)): for j, (col1, col2) in enumerate(zip(row1, row2)): print col1, col2 for i in range(len(table1)): for j in range(len(table1[i])): print table1[i][j], table2[i][j]
if table == table
table >= "1"
>>> "1" > "-" True
sys.stdout = open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setLableWorld.txt', "w" ) print a.word_bank()
with open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setLableWorld.txt', "w" ) as f: f.write(a.word_bank())
Слишком вложенный цикл с многократным перезаписыванием переменных. Ошибку в нем отследить сложно. Можно использовать функцию zip или индексыfor i, (row1, row2) in enumerate(zip(table1, table2)): for j, (col1, col2) in enumerate(zip(row1, row2)): print col1, col2 for i in range(len(table1)): for j in range(len(table1[i])): print table1[i][j], table2[i][j]
self.scen = QtGui.QGraphicsScene(0.0, 0.0, 10*20+6, 10*20+6) self.scen.setBackgroundBrush(QtCore.Qt.white) self.view = QtGui.QGraphicsView(self.scen) self.xxx = QtGui.QGroupBox("PREVIEW") table = [line.split() for line in data.splitlines() if line] table2 = [line2.split() for line2 in data2.splitlines() if line2] layout = QtGui.QGridLayout() layout.addWidget(self.view) for i, table in enumerate(table): for j, table in enumerate(table): if table == "-": item1 = Cell(3 + j * 25, 3 + i * 25, j, i) item1.setBrush(QtCore.Qt.blue) item1.item2.setPlainText("") item1.item3.setPlainText("") self.scen.addItem(item1) else: for z, table2 in enumerate(table2): for q, table2 in enumerate(table2): if table2 == "+": item1 = Cell(3 + q * 25, 3 + z * 25, z, q) item1.setBrush(QtCore.Qt.white) item1.item2.setPlainText("") item1.item3.setPlainText(table) self.scen.addItem(item1) if table2 >="1": item1 = Cell(3 + q * 25, 3 + z * 25, z, q) item1.setBrush(QtCore.Qt.white) item1.item2.setPlainText(table2) item1.item3.setPlainText(table) self.scen.addItem(item1)
сравнивает не значение, а строку по алфавиту:Для моего варианта вполне подходит
item1.item2 - как в этом ориентироваться? названия должны быть вменяемыми.определение каким “карандашом” писать
self.item2 = QtGui.QGraphicsTextItem(parent=self) self.item2.setPlainText("") self.item2.setFont(QtGui.QFont("Verdana", 5, 75)) self.item2.setDefaultTextColor(QtGui.QColor("#050EFF")) self.item2.setPos(QtCore.QPointF(0, 0)) self.item3 = QtGui.QGraphicsTextItem(parent=self) self.item3.setPlainText("") self.item3.setFont(QtGui.QFont("Verdana", 10, 75)) self.item3.setDefaultTextColor(QtGui.QColor("#000000")) self.item3.setPos(QtCore.QPointF(5, 0))
Вместо отдельно сетки и отдельно букв, возможно был бы лучше измененный формат файла.Увы что есть то есть
INTJOGEОн стал еще более непонятным. Его можно упростить, примерно так:
Более менее разобрался с данным циклом
for i in range(len(table)): for j in range(len(table[i])): letter = table[i][j] grid = table2[i][j] item1 = Cell(3 + q * 25, 3 + z * 25, z, q) 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)
INTJOGE
А по поводу того что грид не хочет перестраиваться есть идеи?
INTJOGEДа, данные из файлов нужно перечитывать. И лучше, наверное создать функцию, которая бы загружала данные из файла и возвращала список, например:
Так же у меня возникла идея почему он не перестраивает сетку из-за того что я свои txt фалы задаю не в том месте а именно
def load_grid(filename): with open(filename) as file: return [line.split() for line in file if line]
def buttonGenClick(self): a = crossword.Crossword(15, 15, '-', 5000, crossword.word_list) a.compute_crossword(2) with open('setLableWorld.txt', "w" ) as f: f.write(a.word_bank()) with open('setGrid.txt', "w" ) as f: f.write(a.solution()) with open('setNumGrid.txt', "w" ) as f: f.write(a.display()) with open('setQuare.txt', "w" ) as f: f.write(a.legend()) self.LoadGrid() def LoadGrid(self): with open('setGrid.txt') as file: return [line.split() for line in file if line] with open('setNumGrid.txt') as file2: return [line.split() for line in file2 if line] self.createGrid() def createGrid(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) with open('setGrid.txt') as f: data = f.read() with open('setNumGrid.txt') as f: data2 = f.read()
def load_grid(self, filename): with open(filename) as file: return [line.split() for line in file if line] def createGrid(self): ... table1 = self.load_grid('setGrid.txt') table2 = self.load_grid('setNumGrid.txt') ... for ... def buttonGenClick(self): ... self.createGrid()
def buttonGenClick(self): a = crossword.Crossword(15, 15, '-', 5000, crossword.word_list) a.compute_crossword(2) with open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setLableWorld.txt', "w" ) as f: f.write(a.word_bank()) with open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setGrid.txt', "w" ) as f: f.write(a.solution()) with open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setNumGrid.txt', "w" ) as f: f.write(a.display()) with open('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setQuare.txt', "w" ) as f: f.write(a.legend()) self.createGrid() def LoadGrid(self,filename): with open(filename) as file: return [line.split() for line in file if line] def createGrid(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) table = self.LoadGrid('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setGrid.txt') table2 = self.LoadGrid('C:\Users\INTJOGE\Desktop\PyCross\OutFile\setNumGrid.txt') for i in range(len(table)): for j in range(len(table2)): letter = table[i][j] grid = table2[i][j] item1 = Cell(3 + j * 25, 3 + i * 25, i, j) if letter == "-": item1.setBrush(QtCore.Qt.blue) self.scen.addItem(item1) else: item1.setBrush(QtCore.Qt.white) if grid.isdigit(): item1.item2.setPlainText(grid) item1.item3.setPlainText(letter) self.scen.addItem(item1) print letter else: item1.item2.setPlainText("") item1.item3.setPlainText(letter) self.scen.addItem(item1) print letter self.scen.setSceneRect(0, 0, 15*25+6, 15*25+6) self.view.ensureVisible(0, 0, 10, 10) self.xxx.setLayout(layout)
for i in range(len(table)): for j in range(len(table2)):
for i in range(len(table)): for j in range(len(table[i])):