Форум сайта python.su
Мне нужно открыть файл с тестовыми заданиями, сначала записать вопрос в QTextEdit потом после маркера * вывести варианты ответов в QLineEdit , и после марекра *** перейти ко второму вопросу но оно у меня не корректно работает подскажите пожалуста где ошибка
from PyQt5.QtWidgets 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): f = open('test.txt', 'r') self.F = open('temp.txt', 'w') for i in f: self.F.writelines(i) f.close() self.F.close() self.F = open('temp.txt') for line in self.F.readlines(): if line.rstrip() == "*": self.lines += 1 self.text2.append(line.rstrip()) break self.lines += 1 self.text2.append(line.rstrip()) self.F.close() self.F = open('test.txt') lin = self.F.readlines() self.le3.setText((lin[self.lines]).rstrip()) self.le4.setText((lin[self.lines + 1]).rstrip()) self.vid = lin[self.lines + 2].rstrip() print(lin[self.lines+3]) def next(self): print(self.lines) self.text2.clear() self.le3.clear() self.le4.clear() self.F.seek(self.lines) self.lines = 0 for line in self.F.readlines(): if line.rstrip() == "*": self.lines += 1 self.text2.append(line.rstrip()) break self.lines += 1 self.text2.append(line.rstrip()) self.F.close() self.F = open('test.txt') lin = self.F.readlines() self.le3.setText((lin[self.lines]).rstrip()) self.le4.setText((lin[self.lines + 1]).rstrip()) self.vid = lin[self.lines + 2].rstrip() print(lin[self.lines+3]) 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_())
Прикреплённый файлы:
test1.PNG (12,5 KБ)
Офлайн
Вот скриншот окна
Прикреплённый файлы:
test2.PNG (5,9 KБ)
Офлайн
Меня всегда бесило когдп присылают скриншоты вставленые в .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_())
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_())
[code python][/code]
Отредактировано PEHDOM (Март 26, 2017 15:44:22)
Офлайн