我有一个关于PyQt5教程的简单文本编辑器。但每当我点击文本文件以外的任何内容时,它就会崩溃。如果选择其他类型的文件,如何让它显示“请选择文本文件”这样的消息?这是代码:
import os
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QWidget
from PyQt5.QtWidgets import QTextEdit, QPushButton, QVBoxLayout, QHBoxLayout, QAction, qApp
class Notepad(QWidget):
def __init__(self):
super().__init__()
self.text = QTextEdit(self)
self.clr_btn = QPushButton('Clear')
self.sav_btn = QPushButton('Save')
self.opn_btn = QPushButton('Open')
self.init_ui()
def init_ui(self):
v_layout = QVBoxLayout()
h_layout = QHBoxLayout()
h_layout.addWidget(self.clr_btn)
h_layout.addWidget(self.sav_btn)
h_layout.addWidget(self.opn_btn)
v_layout.addWidget(self.text)
v_layout.addLayout(h_layout)
self.sav_btn.clicked.connect(self.save_text)
self.clr_btn.clicked.connect(self.clear_text)
self.opn_btn.clicked.connect(self.open_text)
self.clr_btn.setStyleSheet("background-color: red")
self.sav_btn.setStyleSheet("background-color: lime")
self.opn_btn.setStyleSheet("background-color: cyan")
self.setLayout(v_layout)
self.setWindowTitle('PyQt5 TextEdit')
self.show()
def save_text(self):
filename = QFileDialog.getSaveFileName(self, 'Save File', os.getenv('HOME'))
with open(filename[0], 'w') as f:
my_text = self.text.toPlainText()
f.write(my_text)
def open_text(self):
filename = QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
with open(filename[0], 'r') as f:
file_text = f.read()
self.text.setText(file_text)
def clear_text(self):
self.text.clear()
class Writer(QMainWindow):
def __init__(self):
super().__init__()
self.form_widget = Notepad()
self.setCentralWidget(self.form_widget)
self.init_ui()
def init_ui(self):
bar = self.menuBar()
file = bar.addMenu('File')
new_action = QAction('New', self)
new_action.setShortcut('Ctrl+N')
save_action = QAction('&Save', self)
save_action.setShortcut('Ctrl+S')
open_action = QAction('&Open', self)
quit_action = QAction('&Quit', self)
file.addAction(new_action)
file.addAction(save_action)
file.addAction(open_action)
file.addAction(quit_action)
quit_action.triggered.connect(self.quit_trigger)
file.triggered.connect(self.respond)
self.show()
def quit_trigger(self):
qApp.quit()
def respond(self, q):
signal = q.text()
if signal == 'New':
self.form_widget.clear_text()
elif signal == '&Open':
self.form_widget.open_text()
elif signal == '&Save':
self.form_widget.save_text()
app = QApplication(sys.argv)
writer = Writer()
sys.exit(app.exec_())
答案 0 :(得分:1)
为什么不直接接受 .txt
个文件?
以下是如何操作:
filename = QFileDialog.getOpenFileName(self, str("Open File"), os.getenv('HOME'),str("Text Files(*.txt)"))