首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用QPlainTextEdit通过QFileDialog保存文本并创建.txt文件

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

Stack Overflow用户
提问于 2019-12-02 08:55:47
回答 1查看 1K关注 0票数 0

我在存款单(来自QPlainTextEdit的文本)上遇到麻烦。我只需要以txt格式保存。键入文本并单击按钮后,程序会显示错误“预期的字符串或类似字节的对象,而不是非类型的对象”。.Notepad的程序从类fileeki开始,直到类fileush为止。我使用Python3.7、PyQt5和QtDesigner来创建interface.Opening,但是saving.Please下载了项目的所有元素。还有一些模块,您必须使用install.Thanks才能进行尝试。

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-02 10:47:51

错误是因为您实际上没有使用文件对话框中返回的数据:

代码语言:javascript
运行
复制
    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:

代码语言:javascript
运行
复制
    def saveac(self):
        path, filter = QFileDialog.getSaveFileName(self, "Save file", "", "Text files (*.txt)")

        if not path:

            return

        self._save_to_path(path)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59135406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档