我在存款单(来自QPlainTextEdit的文本)上遇到麻烦。我只需要以txt格式保存。键入文本并单击按钮后,程序会显示错误“预期的字符串或类似字节的对象,而不是非类型的对象”。.Notepad的程序从类fileeki开始,直到类fileush为止。我使用Python3.7、PyQt5和QtDesigner来创建interface.Opening,但是saving.Please下载了项目的所有元素。还有一些模块,您必须使用install.Thanks才能进行尝试。
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
发布于 2019-12-02 10:47:51
错误是因为您实际上没有使用文件对话框中返回的数据:
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)
https://stackoverflow.com/questions/59135406
复制相似问题