#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Dec 10 11:00:00 2019 @author: andrea """ # 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 * class TextEditor: def __init__(self): # creare l'App che gestisce l'event loop self.app = QApplication([]) # creare la window/widget principale self.window = QWidget() self.window.setWindowTitle("Fondamenti di programmazione") # creare layout verticale complessivo (bottoniera sopra textarea) self.layout = QVBoxLayout() # layout orizzontale per la bottoniera self.bottoni_layout = QHBoxLayout() # bottoni load/save/exit self.save_button = QPushButton("Save") self.load_button = QPushButton("Load") self.exit_button = QPushButton("Exit") # textarea self.text_area = QTextEdit("Inserisci qui il tuo testo") # costruisco la bottoniera self.bottoni_layout.addWidget(self.load_button) self.bottoni_layout.addWidget(self.save_button) self.bottoni_layout.addWidget(self.exit_button) # sistemo bottoniera e textarea self.layout.addLayout(self.bottoni_layout) self.layout.addWidget(self.text_area) # inserisco i widget nella finestra self.window.setLayout(self.layout) # collego gli eventi dei bottoni alle callback qui sotto # "quando viene cliccato XXX allora viene eseguito il metodo YYY" self.load_button.clicked.connect(self.open_callback) self.save_button.clicked.connect(self.save_callback) self.exit_button.clicked.connect(self.exit_callback) # definire le callback che vengono chiamate dalla GUI # quando premiamo i bottoni def open_callback(self): print("premuto Open") filename,_ = QFileDialog.getOpenFileName(self.window, filter="Testi (*.txt);;Programmi (*.py)") if filename: self.window.setWindowTitle(filename) with open(filename, encoding='utf8') as F: self.text_area.setText(F.read()) def save_callback(self): print("premuto Save") filename,_ = QFileDialog.getSaveFileName(self.window, filter="Testi (*.txt);;Programmi (*.py)") if filename: with open(filename, mode='w', encoding='utf8') as F: F.write(self.text_area.toPlainText()) def exit_callback(self): print("premuto Exit") self.window.close() # chiudo la finestra self.app.exit() # uccido l'applicazione # definire metodo run che apre la finestra e esegue l'event-loop def run(self): # mostra la finestra self.window.show() # esegue l'applicazione che reaagisce agli eventi self.app.exec() # instanziare ed eseguire run che mostra la finestra editor = TextEditor() editor.run()