繁体   English   中英

通过 QFileDialog 从 QPlainTextEdit 保存文本并创建 .txt 文件

[英]Saving text from QPlainTextEdit by QFileDialog and creating .txt file

我在保存笔记(来自 QPlainTextEdit 的文本)时遇到问题。 我只需要保存为txt格式。 键入文本并单击按钮后,程序显示错误“预期的字符串或类似字节的对象不是无类型”。记事本的程序从类 fileeki 开始,直到类 fileush。 我使用 Python 3.7、PyQt5 和 QtDesigner 创建界面。打开效果很好,但不能保存。请下载我项目的所有元素。 还有模块,你必须安装。谢谢你的尝试。

import sys

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPlainTextEdit
from PyQt5.QtWidgets import QLabel, QPushButton, QMessageBox, QFileDialog
from PyQt5.QtGui import QPixmap


class fileeki(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__()
        uic.loadUi('uineweki.ui', self)

        self.path = None

        self.pushButton.clicked.connect(self.opening_run)
        self.pushButton_2.clicked.connect(self.saving_run)
        self.pushButton_3.clicked.connect(self.saveac)
        self.pushButton_5.clicked.connect(self.new_run)

    def dialog_critical(self, s):
        dlg = QMessageBox(self)
        dlg.setText(s)
        dlg.setIcon(QMessageBox.Critical)
        dlg.show()

    def opening_run(self):
        path, _ = QFileDialog.getOpenFileName(self, "Open file", "", "Text files (*.txt)")

        if path:
            try:
                with open(path, 'rU') as f:
                    text = f.read()

            except Exception as e:
                self.dialog_critical(str(e))

            else:
                self.path = path
                self.plainTextEdit.setPlainText(text)

    def saving_run(self):
        if self.path is None:

            return self.saveac()

        self._save_to_path(self.path)

    def saveac(self):
        path = QFileDialog.getSaveFileName(self, "Save file", "", "Text files (*.txt)")

        if not path:

            return

        self._save_to_path(self.path)

    def _save_to_path(self, path):
        text = self.plainTextEdit.toPlainText()
        try:
            with open(path, 'w') as f:
                f.write(text)

        except Exception as e:
            self.dialog_critical(str(e))

        else:
            self.path = path

    def new_run(self):
        self.plainTextEdit.clear()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = fileeki()
    ex.show()
    sys.exit(app.exec())

链接到我在 github 上的项目: https : //github.com/iMAGA07/notepadd

错误是因为您实际上并未使用从文件对话框返回的数据:

    def saveac(self):
        path = QFileDialog.getSaveFileName(self, "Save file", "", "Text files (*.txt)")

        if not path:

            return

        self._save_to_path(self.path) # <-- here!

此外, getSaveFileName 静态返回一个由文件路径选定过滤器字符串组成的元组,如果取消对话框,它们都可能为空,因此if not path将始终失败。

检查返回的数据并相应地调用 _save_to_path :

    def saveac(self):
        path, filter = QFileDialog.getSaveFileName(self, "Save file", "", "Text files (*.txt)")

        if not path:

            return

        self._save_to_path(path)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM