# Importa tutte le classi per costruire GUI con Qt from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * #from PyQt5.QtWebEngineWidgets import * from PyQt5.QtWebKitWidgets import * class TextEditor: def __init__(self): '''Crea un'applicazione Qt e una finestra''' # verifica se l'applicazione è già esistente self.app = QApplication.instance() # o ne crea una nuova if not self.app: self.app = QApplication([]) self.window = QWidget() self.window.resize(500, 300) self.window.setWindowTitle('Fondamenti di Programmazione') # Crea i layout per la finestra e la toolbar layout = QVBoxLayout() tlayout = QHBoxLayout() # Crea i tre bottoni self.button_open = QPushButton('Open') self.button_save = QPushButton('Save') self.button_exit = QPushButton('Exit') # Aggiunge i bottoni al layout della toolbar tlayout.addWidget(self.button_open) tlayout.addWidget(self.button_save) tlayout.addWidget(self.button_exit) # Aggiunge la toolbar al layout della finestra layout.addLayout(tlayout) # Crea un'area per editare testo self.textedit = QTextEdit('scrivimi...') # Aggiunge l'area testo al layout della finestra layout.addWidget(self.textedit) # Imposta il layout della finestra self.window.setLayout(layout) # Imposta le callback dei tre bottoni self.button_open.clicked.connect( self.open_callback ) self.button_save.clicked.connect( self.save_callback ) self.button_exit.clicked.connect( self.exit_callback ) def run(self): '''Rende la finestra visibile e lancia l'applicazione''' self.window.show() self.app.exec_() # callback del bottone EXIT def exit_callback(self): print('Exit clicked') self.window.close() self.app.quit() print('Exit done') # callback per aprire un file def open_callback(self): self.filename, _ = QFileDialog.getOpenFileName(self.window, filter="Programmi Python (*.py);;Testi (*.txt)") # Verifica se l'utente ha scelto "Cancel" if not self.filename: return with open(self.filename) as f: self.textedit.setText(f.read()) # callback per salvare il file def save_callback(self): self.filename, _ = QFileDialog.getSaveFileName(window, filter="Programmi Python (*.py);;Testi (*.txt)") # Verifica se l'utente ha scelto "Cancel" if not self.filename: return with open(self.filename, 'w') as f: f.write(self.textedit.toPlainText()) if __name__ == '__main__': app = TextEditor() app.run()