PyQt5, текст из *.txt файла не загружается в QTextEdit
Программа должна выводить текст из обычного .txt документа (кодировка - utf-8) в текстовое поле QTextEdit.
Программа аварийно завершается без сообщения об ошибке. Как нужно исправить код? И объясните причину ошибки, если она будет не очевидна. Спасибо.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QFileDialog, QTextEdit
prg = QApplication(sys.argv)
tex_pole = QTextEdit()
def load():
path = QFileDialog.getOpenFileName(parent=None, caption='Обрати файл', filter='text *.txt')[0]
fil = open(path, 'r', encoding='utf-8')
txt = fil.readlines()
tex_pole.setText(txt)
window = QWidget()
vbx = QVBoxLayout()
hbx_zavant_zbereh_knp = QHBoxLayout()
knp_zavant_text = QPushButton('Загрузить текст')
knp_zavant_text.clicked.connect(load)
hbx_zavant_zbereh_knp.addWidget(knp_zavant_text)
vbx.addLayout(hbx_zavant_zbereh_knp)
vbx.addWidget(tex_pole)
window.setLayout(vbx)
window.show()
sys.exit(prg.exec())
Ответы (2 шт):
Автор решения: Serg Bocharov
→ Ссылка
Проблема в том, readlines() возвращает List[], а setText() - принимает строку str в качестве аргумента.
Самый простой вариант, чтобы было понятно где причина:
def load():
path = QFileDialog.getOpenFileName(parent=None, caption='Обрати файл', filter='text *.txt')[0]
fil = open(path, 'r', encoding='utf-8')
txt = str(fil.readlines())
tex_pole.setText(txt)
Автор решения: S. Nick
→ Ссылка
причина очевидна:
tex_pole.setText(txt)
TypeError: setText(self, str): argument 1 has unexpected type 'list'
Всегда запускайте свое приложение в терминале/CMD и вы получите понятную ошибку.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, \
QHBoxLayout, QPushButton, QFileDialog, QTextEdit
prg = QApplication(sys.argv)
tex_pole = QTextEdit()
def load():
path = QFileDialog.getOpenFileName(parent=None, caption='Обрати файл', filter='text *.txt')[0]
fil = open(path, 'r', encoding='utf-8')
txt = fil.read() # - readlines() + read
tex_pole.setText(txt)
window = QWidget()
vbx = QVBoxLayout()
hbx_zavant_zbereh_knp = QHBoxLayout()
knp_zavant_text = QPushButton('Загрузить текст')
knp_zavant_text.clicked.connect(load)
hbx_zavant_zbereh_knp.addWidget(knp_zavant_text)
vbx.addLayout(hbx_zavant_zbereh_knp)
vbx.addWidget(tex_pole)
window.setLayout(vbx)
window.show()
sys.exit(prg.exec())
