1

Тема: Виведення даних з файлу в QTextEdit і в QLineEdit(PyQt5)

Мені потрібно відкрити файл з тестовими завданнями, спочатку записати питання в 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_())
Post's attachments

test1.PNG 12.54 kb, 89 downloads since 2017-03-25 

2

Re: Виведення даних з файлу в QTextEdit і в QLineEdit(PyQt5)

Скріншот форми

Post's attachments

test2.PNG 5.9 kb, 91 downloads since 2017-03-25 

3 Востаннє редагувалося ADR (27.03.2017 02:28:57)

Re: Виведення даних з файлу в QTextEdit і в QLineEdit(PyQt5)

Як відтворити помилку?

  • Надайте вхідні файли

  • Інструкцію що потрібно зробити, щоб відтворити проблему.

  • Опишіть, що ви хотіли отримати і що отримали.

Я хочу Вам допомогти, але мені влом догадуватись у чому проблема.

Прихований текст
тим більше, що код жахливий

4

Re: Виведення даних з файлу в QTextEdit і в QLineEdit(PyQt5)

    def but_remove(self):
        f = open("test.txt",'w+').readlines()
        for i in [0, 3, 1]:
            f.pop(i)

Цікава така "річ у собі".
Сильно підозрюю, що воно працює не так, як хотілося б (бо після першого pop рядки зміщуються), але це нікому не помітно, бо локальна змінна f знищується при виході з функції.