Меня всегда бесило когдп присылают скриншоты вставленые в .doc -файл.
Теперь меня начинает бесить когда файл котороый нужно скормить скрипту чтобы проверить его работоспособность присылают в виде скриншота. Вам прикрепить text.txt религия не позволяет?
Теперь по тексту. По вашему self.F.seek(self.lines) что должна делать? Судя по всему вы считаете то дожна переходить на строку self.lines, а на самом деле если верить документации
http://pythonz.net/references/named/file.seek/ то self.lines в вашем сулчае смещение в байтах. в БАЙТАХ Карл!
теперь зачем у вас вот это?
def open_file(self):
f = open('test.txt', 'r')
self.F = open('temp.txt', 'w')
for i in f:
self.F.writelines(i)
f.close()
self.F.close()
.......
если нужно сделать копию файла есть более простые способы, напмриер так
from shutil import copyfile
copyfile(src, dst)
Вбщем вот так работает:
from PyQt4.QtGui import *
import sys
import linecache
class MyWindow(QWidget):
def __init__(self):
super(MyWindow, self).__init__()
self.resize(300, 250)
self.lines = 0
self.vid = ''
vb = QVBoxLayout()
self.setLayout(vb)
self.but1 = QPushButton('Save')
self.text1 = QTextEdit()
self.le1 = QLineEdit()
self.le2 = QLineEdit()
self.but2 = QPushButton('Open')
self.text2 = QTextEdit()
self.le3 = QLineEdit()
self.le4 = QLineEdit()
self.le5 = QLineEdit()
self.but3 = QPushButton("A")
self.but4 = QPushButton("B")
self.but5 = QPushButton("Remove")
self.but6 = QPushButton("Next")
vb.addWidget(self.but1)
vb.addWidget(self.text1)
vb.addWidget(self.le1)
vb.addWidget(self.le2)
vb.addWidget(self.le5)
vb.addWidget(self.but2)
vb.addWidget(self.text2)
vb.addWidget(self.le3)
vb.addWidget(self.le4)
vb.addWidget(self.but3)
vb.addWidget(self.but4)
vb.addWidget(self.but6)
vb.addWidget(self.but5)
self.but1.clicked.connect(self.save_file)
self.but2.clicked.connect(self.open_file)
self.but3.clicked.connect(self.but3_click)
self.but4.clicked.connect(self.but4_click)
self.but6.clicked.connect(self.next)
self.but5.clicked.connect(self.but_remove)
self.show()
def save_file(self):
f = open( "test.txt" ,'a' )
for item in self.text1.toPlainText():
f.write(item)
f.write('\n')
f.write("*")
f.write('\n')
f.write(self.le1.text())
f.write('\n')
f.write(self.le2.text())
f.write('\n')
f.write(self.le5.text() + '\n')
f.write("***\n")
f.close()
def but_remove(self):
f = open("test.txt",'w+').readlines()
for i in [0, 3, 1]:
f.pop(i)
def open_file(self):
self.fileName = 'test.txt' # файл с котороым работает
self.lines = sum(1 for l in open(self.fileName, 'r')) # к-во строк в файле
if self.lines < 6:
print('file {} is corrupter or empty'.format(self.fileName))
return False
self.currentLine = 1 # текущая строка
self.getTest() # получаем вопрос теста начиная с текущей строки
def getTest(self):
'''
процедура получения теста
'''
while self.currentLine < self.lines:
line = linecache.getline(self.fileName, self.currentLine) # получаем текущую строку
self.text2.append(line.rstrip())
if line.rstrip() == "*": # если нащли * то следующин строки должны содержать:
line = linecache.getline(self.fileName, self.currentLine+1).rstrip() # первый ответ
self.le3.setText(line)
line = linecache.getline(self.fileName, self.currentLine+2).rstrip() # второй ответ
self.le4.setText(line)
line = linecache.getline(self.fileName, self.currentLine+3).rstrip() # правильный ответ
self.vid = line
print(linecache.getline(self.fileName, self.currentLine+4).rstrip()) # ***
self.currentLine += 5
break
self.currentLine += 1
def next(self):
if self.currentLine >= self.lines: # если конец файла то тест окончен
print('TEST COmpleted')
return False
self.text2.clear()
self.le3.clear()
self.le4.clear()
self.getTest() # получаем следующий тест
def but3_click(self):
if self.vid == 'A':
print("True")
else:
print("False")
def but4_click(self):
if self.vid == 'B':
print("True")
else:
print("False")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
sys.exit(app.exec_())
А вообще вы занимаетесь онанизмом в чистом виде. Ваш подход к работе имеет смысл только в двух случаях.
1. Данные вам уже приходят в таком виде.
2.Обучение, чтобы понять как работае тот или иной алгоритм
ну или так, если не хотите использовать linecache, а нужно file.readline\readlines
from PyQt4.QtGui import *
import sys
class MyWindow(QWidget):
def __init__(self):
super(MyWindow, self).__init__()
self.resize(300, 250)
self.lines = 0
self.vid = ''
vb = QVBoxLayout()
self.setLayout(vb)
self.but1 = QPushButton('Save')
self.text1 = QTextEdit()
self.le1 = QLineEdit()
self.le2 = QLineEdit()
self.but2 = QPushButton('Open')
self.text2 = QTextEdit()
self.le3 = QLineEdit()
self.le4 = QLineEdit()
self.le5 = QLineEdit()
self.but3 = QPushButton("A")
self.but4 = QPushButton("B")
self.but5 = QPushButton("Remove")
self.but6 = QPushButton("Next")
vb.addWidget(self.but1)
vb.addWidget(self.text1)
vb.addWidget(self.le1)
vb.addWidget(self.le2)
vb.addWidget(self.le5)
vb.addWidget(self.but2)
vb.addWidget(self.text2)
vb.addWidget(self.le3)
vb.addWidget(self.le4)
vb.addWidget(self.but3)
vb.addWidget(self.but4)
vb.addWidget(self.but6)
vb.addWidget(self.but5)
self.but1.clicked.connect(self.save_file)
self.but2.clicked.connect(self.open_file)
self.but3.clicked.connect(self.but3_click)
self.but4.clicked.connect(self.but4_click)
self.but6.clicked.connect(self.next)
self.but5.clicked.connect(self.but_remove)
self.show()
def save_file(self):
f = open( "test.txt" ,'a' )
for item in self.text1.toPlainText():
f.write(item)
f.write('\n')
f.write("*")
f.write('\n')
f.write(self.le1.text())
f.write('\n')
f.write(self.le2.text())
f.write('\n')
f.write(self.le5.text() + '\n')
f.write("***\n")
f.close()
def but_remove(self):
f = open("test.txt",'w+').readlines()
for i in [0, 3, 1]:
f.pop(i)
def open_file(self):
self.fileName = 'test.txt' # файл с котороым работает
F = open(self.fileName)
self.Data = F.readlines() #считываем файл и помещаем строки файла в self.Data
self.lines = len(self.Data) # к-во строк в файле
F.close()
if self.lines < 6:
print('file {} is corrupter or empty'.format(self.fileName))
return False
self.currentLine = 0 # текущая строка
self.getTest() # получаем вопрос теста начиная с текущей строки
def getTest(self):
'''
процедура получения теста
'''
while self.currentLine < self.lines:
line = self.Data[self.currentLine] # получаем текущую строку
self.text2.append(line.rstrip())
if line.rstrip() == "*": # если нащли * то следующин строки должны содержать:
line = self.Data[self.currentLine+1].rstrip() # первый ответ
self.le3.setText(line)
line = self.Data[ self.currentLine+2].rstrip() # второй ответ
self.le4.setText(line)
line = self.Data[self.currentLine+3].rstrip() # правильный ответ
self.vid = line
print(self.Data[self.currentLine+4].rstrip()) # ***
self.currentLine += 5
break
self.currentLine += 1
def next(self):
if self.currentLine >= self.lines: # если конец файла то тест окончен
print('TEST COmpleted')
return False
self.text2.clear()
self.le3.clear()
self.le4.clear()
self.getTest() # получаем следующий тест
def but3_click(self):
if self.vid == 'A':
print("True")
else:
print("False")
def but4_click(self):
if self.vid == 'B':
print("True")
else:
print("False")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
sys.exit(app.exec_())