mirror of
https://github.com/pyqt/examples.git
synced 2025-08-23 18:17:10 +00:00
85 lines
2.4 KiB
Python
85 lines
2.4 KiB
Python
from PyQt5.QtWidgets import *
|
|
from PyQt5.QtGui import QKeySequence
|
|
|
|
class MainWindow(QMainWindow):
|
|
def closeEvent(self, e):
|
|
if not text.document().isModified():
|
|
return
|
|
answer = QMessageBox.question(
|
|
window, None,
|
|
"You have unsaved changes. Save before closing?",
|
|
QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel
|
|
)
|
|
if answer & QMessageBox.Save:
|
|
save()
|
|
if text.document().isModified():
|
|
# This happens when the user closes the Save As... dialog.
|
|
# We do not want to close the window in this case because it
|
|
# would throw away unsaved changes.
|
|
event.ignore()
|
|
elif answer & QMessageBox.Cancel:
|
|
e.ignore()
|
|
|
|
app = QApplication([])
|
|
app.setApplicationName("Text Editor")
|
|
text = QPlainTextEdit()
|
|
window = MainWindow()
|
|
window.setCentralWidget(text)
|
|
|
|
file_path = None
|
|
|
|
menu = window.menuBar().addMenu("&File")
|
|
open_action = QAction("&Open")
|
|
def open_file():
|
|
global file_path
|
|
path = QFileDialog.getOpenFileName(window, "Open")[0]
|
|
if path:
|
|
text.setPlainText(open(path).read())
|
|
file_path = path
|
|
open_action.triggered.connect(open_file)
|
|
open_action.setShortcut(QKeySequence.Open)
|
|
menu.addAction(open_action)
|
|
|
|
save_action = QAction("&Save")
|
|
def save():
|
|
if file_path is None:
|
|
save_as()
|
|
else:
|
|
with open(file_path, "w") as f:
|
|
f.write(text.toPlainText())
|
|
text.document().setModified(False)
|
|
save_action.triggered.connect(save)
|
|
save_action.setShortcut(QKeySequence.Save)
|
|
menu.addAction(save_action)
|
|
|
|
save_as_action = QAction("Save &As...")
|
|
def save_as():
|
|
global file_path
|
|
path = QFileDialog.getSaveFileName(window, "Save As")[0]
|
|
if path:
|
|
file_path = path
|
|
save()
|
|
save_as_action.triggered.connect(save_as)
|
|
menu.addAction(save_as_action)
|
|
|
|
close = QAction("&Close")
|
|
close.triggered.connect(window.close)
|
|
menu.addAction(close)
|
|
|
|
help_menu = window.menuBar().addMenu("&Help")
|
|
about_action = QAction("&About")
|
|
help_menu.addAction(about_action)
|
|
def show_about_dialog():
|
|
text = "<center>" \
|
|
"<h1>Text Editor</h1>" \
|
|
"⁣" \
|
|
"<img src=icon.svg>" \
|
|
"</center>" \
|
|
"<p>Version 31.4.159.265358<br/>" \
|
|
"Copyright © Company Inc.</p>"
|
|
QMessageBox.about(window, "About Text Editor", text)
|
|
about_action.triggered.connect(show_about_dialog)
|
|
|
|
window.show()
|
|
app.exec_()
|