Как заставить QTextEdit автоматически сохранять текст в PyQt5?

Как я могу заставить QTextEdit сохранять все, что я ввожу в него, автоматически без необходимости нажимать кнопку? Можно ли это сделать в PyQt5? До сих пор я смог сделать это только с привязкой кнопок.

def save_text():
    text=textedit.toPlainText()
    with open('mytextfile.txt', 'w') as f:
        f.write(text)

button.clicked.connect(save_text)

person Nuh Yamin    schedule 17.10.2018    source источник
comment
зачем вам это? Обычно редакторы сохраняют данные, когда это необходимо, например, нажмите Ctrl + S, чтобы указать, что файл обновлен. Задача обновления при добавлении или удалении письма тяжела.   -  person eyllanesc    schedule 17.10.2018
comment
Я делаю текстовый редактор с автозаполнением. Данные будут из того, что я набрал в самом текстовом редакторе. Поэтому мне не нужно сначала нажимать кнопку или Ctrl+S, чтобы автозаполнение запустилось с обновленными данными. Можно ли это сделать в PyQt5? Это слишком тяжело для моего компьютера?   -  person Nuh Yamin    schedule 17.10.2018
comment
У вас есть лучший способ сделать это? Помогите мне, пожалуйста.   -  person Nuh Yamin    schedule 17.10.2018
comment
Я не понимаю, не вижу связи с автозаполнением, чтобы делать автозаполнение не обязательно сохранять файл можно с данными в ОЗУ, если у вас ярлык Ctrl + S занят то используйте другой ярлык. Идея обновления файла заключается в замене файла, поэтому, если у вас есть файл из 100 000 строк, каждый раз, когда вы добавляете или удаляете букву, вы будете делать это с 100 000 строк.   -  person eyllanesc    schedule 17.10.2018
comment
Как я указываю вам, коммерческие издатели обновляют только файл, который находится на жестком диске, только тогда, когда вы нажимаете Ctrl + S или приложение закрывается, так как всегда появляется диалог, если вы хотите обновить или хотите удалить информацию, не так ли? думаете, что у всех IDE есть разумная причина для этого? Потому что причина в том, что задача слишком дорогая.   -  person eyllanesc    schedule 17.10.2018
comment
Я понимаю. Спасибо за совет. Так что, может быть, мне нужно просто добавить текст в список и сделать его данными? Но все же как это сделать автоматически в PyQt5? Это все еще слишком тяжелая задача? Ваш совет пожалуйста.   -  person Nuh Yamin    schedule 17.10.2018
comment
используйте сигнал textChanged QTextEdit для выполнения какой-либо задачи, этот сигнал генерируется каждый раз, когда текст изменяется.   -  person eyllanesc    schedule 17.10.2018
comment
Думаю, я вас понимаю, у вас есть список, который вы используете в качестве источника для автозаполнения, поэтому я рекомендую вам использовать textChanged и убедиться, что есть новое слово, а не просто буква.   -  person eyllanesc    schedule 17.10.2018


Ответы (1)


Если вы хотите, чтобы ваш метод вызывался каждый раз, когда вы меняете текст в QTextEdit, просто используйте сигнал "textChanged". Я не думаю, что в вашем случае имеет смысл хранить текст в файле, но вот рабочий код того, что вы просили:

import sys
from PyQt5.QtWidgets import *


class MyMainWindow(QMainWindow):

    def __init__(self):
        super(MyMainWindow, self).__init__()

        layout = QHBoxLayout()
        centralWidget = QWidget()
        centralWidget.setLayout(layout)
        self.setCentralWidget(centralWidget)

        self.textedit = QTextEdit()
        self.textedit.textChanged.connect(self.save_text)
        layout.addWidget(self.textedit)

    def save_text(self):
        text = self.textedit.toPlainText()
        with open('mytextfile.txt', 'w') as f:
            f.write(text)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = MyMainWindow()
    form.show()
    sys.exit(app.exec_())
person koxx    schedule 17.10.2018