Forum >> Programmazione Python >> GUI >> PyQt5: Mi aiutate a capire questa parte di codice?

Pagina: 1

Ciao ragazzi,

ho appena iniziato a leggere un libro su PyQt5. nel primo capitolo vengono spiegate alcune cose, fino ad arrivare alla creazione di un template di base:
import sys
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtGui as qtg
from PyQt5 import QtCore as qtc

class MainWindow(qtw.QWidget):
    def __init__(self):
        """MainWindow constructor"""
        super().__init__()
        # Main UI code goes here

        # End main UI code
        self.show()

if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    mw = MainWindow()
    sys.exit(app.exec())


le righe di codice utilizzate in questo template vengono spiegate con molta superficialità, ma del resto non posso nemmeno lamentarmi. il libro infatti è focalizzato solo sulla libreria PyQt5 e richiede una conoscenza pregressa del linguaggio Python.


da quello che leggo posso dire di comprendere appieno il significato dei primi due blocchi di codice:

1. importo tutta la libreria "sys" e solo alcuni oggetti dalla libreria "PyQt5". a quest'ultimi viene poi associato un nome più breve.

2. creo una sotto classe (di nome "MainWindow") della super classe "QWidget". al suo interno eseguo un "override" della funzione ereditata "__init__" e attraverso la funzione predefinita "super" richiamo la funzione originale "__init__". questo passaggio immagino venga fatto per evitare problemi quando, in un futuro, utilizzerò dei metodi ereditati dalla super classe "QWidget". tra i due commenti andrà aggiunto il codice specifico del progetto, mentre self.show() mette in evidenza la finestra (il nostro oggetto "self", che corrisponderà ad una istanza della classe "MainWindow") sullo schermo.


fin qua tutto bene credo. le mie attuali conosce di Python dunque mi permettono di interpretare i primi due blocchi del codice, ma non riesco a comprendere il terzo blocco. mi aiutate a capirlo? mi fate un'analisi riga per riga?

il libro si limita a dire che "if __name__ == '__main__':" significa che il codice (quello che viene dopo ovviamente) deve essere eseguito solo se lo script è stata eseguito direttamente. ma cosa significa eseguire lo script direttamente? non capisco, .. per le ultime tre righe di codice lascio a voi la parola, non vorrei dire stupidaggini anche se già una mezza idea ce l'avrei.


--- Ultima modifica di TurboC in data 2020-03-10 02:40:31 ---
https://docs.python.org/3/library/__main__.html


il problema è che se non conosci python dovresti prima seguire passo dopo passo un libro su python. Il Lutz è sempre una buona scelta, per questo. Oltre tutto, le GUI sono un argomento tradizionalmente complicato, richiedono parecchie conoscenze pregresse. Capisco che uno vuole "fare subito", ottenere subito dei risultati, ma Python semplicemente non è fatto in questo modo e non si può imparare in questo modo. Sorry.

Ciao RicoPol,

sicuramente non posso dire di essere un esperto, ma molte cose su Python già le conosco. anche se ammetto di non aver mai programmato seriamente con le classi, con la programmazione "tradizionale" ho abbastanza esperienza. durante l'arco dell'anno per esempio ho scritto molti programmi utili al mio lavoro ed alcuni di questi erano anche abbastanza complessi.

per uno di loro ho creato persino un menu a riga di comando, creando da zero anche una barra di avanzamento. adesso però vorrei provare a dargli un'interfaccia grafica. ho scelto PyQt5 perché incorpora un tool molto potente chiamato QT Desgner. una volta apprese le basi di questa libreria l'interfaccia la potrei costruire senza troppe difficoltà facendo uso di questo tool.



detto questo mi sembra che le basi, almeno per iniziare, ci siano. ti faccio due domande:

1. quali sono le conoscenze pregresse che dovrei avere per iniziare a programmare usando la libreria PyQt5? così se mi manca qualcosa, me lo studio.

2. mi potresti spiegare riga per riga l'ultimo blocco del codice? cerca di essere il più semplice e dettagliato possibile per favore. come se stessi parlando ad un bambino :) grazie.


--- Ultima modifica di TurboC in data 2020-03-10 14:32:28 ---
che cosa non ti è chiaro esattamente del link alla documentazione che ti ho segnalato? Perché lo hai letto, vero?




tra l'altro devo dire che l'idioma "if __name__=='__main__'" è veramente uno dei più tipici in Python, lo si incontra praticamente ovunque... perché non provi a googlare "if __name__==__main__" e vedi che cosa succede... hai decine e decine di spiegazioni... tra le prime ce n'è anche una in italiano, lol...

Però davvero, credimi, fidami, dammi retta... anche io "più o meno" sapevo guidare prima di prendere la patente... ma quando poi ho preso la patente ho capito che cosa volevano dire un sacco di cartelli... come dire... abbastanza importanti. Prenditi un libro e seguilo passo passo, fare programmini è vagamente utile ma non basta neanche alla lontana. Se poi ti metti a fare GUI programming senza sapere che cosa è "if __name__...", allora veramente, ti aspettano decine e decine di ostacoli come questo. (Ok, so che non seguirai questo consiglio, ma almeno io te l'ho dato).





Il resto, è tutta inizializzazione di PyQt... istanzi l'applicazione, istanzi la finestra principale, fai partire il main loop... onestamente per capire questo ti servirebbe capire come funziona il framework, e per fare questo hai bisogno di una certa conoscenza di programmazione a oggetti. Però insomma, alla fine si tratta di una parte abbastanza "automatica" e potresti anche "capirla poco" nel senso: tanto è quello che si deve fare comunque per avviare qualsiasi applicazione Qt, quindi non è che ci sia molto da fare. Intendiamoci, anche qui: la cosa giusta sarebbe invece cercarsi una buona documentazione. Per esempio, trovo che il primo tutorial tra quelli elencati qui https://wiki.python.org/moin/PyQt/Tutorials non sia malissimo. Ma puoi cercare anche altre cose.




perdona la banalità, ma mi spieghi cosa rispondi a fare se ciò che scrivi non influisce minimamente a dare un aiuto concreto a chi pone la domanda? oltre a minimizzare gli sforzi altrui e la voglia di imparare si intende. hai mai spiegato qualcosa a qualcuno senza essere arrogante?

cos'è che non ti è chiaro quando ti chiedo di spiegare in maniera semplice e comprensibile ogni singola riga di codice? e sia chiaro, stiamo parlando di sole QUATTRO righe!! ne sei in grado? perché da quello che leggo non è abbastanza. ma del resto ti capisco, che senso ha dare una risposta seria? è molto più facile invece ribadire l'ignoranza di chi pone la domanda e insistere sul fatto che debba studiare, cercare su Internet, .. ma guarda un po'! non ci avevo mai pensato! sai che faccio adesso? quando conoscerò bene l'argomento inizierò a porre domande un po' a casaccio sui forum, si! credo che questa sia la scelta migliore! dopotutto che senso ha chiedere quando non si conosce?

professore come mai non si può dividere un numero per zero? ma come?!! è così ovvio! non conosci la matematica? cerca su Google, troverai decine e decine di risposte a questa domanda, anche in italiano! ahah.. ecco, i tuoi commenti sono utili quanto una risposta del genere. disprezzo per chi pone domande, menefreghismo e molta arroganza. ma se la domanda è così banale perché non me ne dai una dimostrazione? in genere non rispondo mai alle provocazioni, ma la cosa che mi ha dato più fastidio, anche se ormai non ne sono più tanto sicuro, è che tu le cose le sai!

qua c'è gente che studia, non mi diverte porre domande su internet! abbi rispetto! e sappi che ho sempre studiato da solo, e non lo dico tanto per vantarmi, ma per farti capire che avere una persona che ti spiega le cose, che sia tu qua sul forum, o qualcun'altro in un corso professionale, è molto utile perché fa risparmiare tempo e fatica! tempo nel cercare la documentazione e fatica nel comprenderne il contenuto, e quando ci si imbatte in un argomento nuovo, non è mai così facile come sembra.

di Python conosco gli oggetti (gli atomi che compongono questo linguaggio), i data types (tipi numerici, stringhe, operatori ed espressioni), la struttura del codice e dei dati (liste, tuple, dizionari, set, le istruzioni per il controllo del flusso, i cicli, le funzioni, ..), il concetto di Object Oriented (classi, istanze, attributi, le super classi, il metodo "__init__", la funzione predefinita "super", i decoratori, le properties, ..), le eccezioni, i moduli, diverse librerie di terze parti e tutta l'esperienza che ho acquisito in un anno di studio e di esperienze lavorative anche se in realtà non sono un programmatore ma faccio tutt'altro..

detto questo si, mi mancava qualcosa in effetti, sono andato a rileggermi meglio i "moduli" e adesso ho capito. per spiegare bene cosa significa l'istruzione "if __name__ == '__main__'" bisogna prima fare una distinzione tra cosa sia uno script e cosa sia un modulo, e mi fermo qua perché tanto di andare avanti con te non c'è né bisogno, visto che sai già "guidare la macchina". papà come funziona lo sterzo? ahahah.. che domande! cerca su Google, troverai decine e decine di risposte, tra queste persino nella nostra lingua!! ahahahahahahahah.. inutile ragazzino ignorante ahaha.. hai ancora tanta strada da fare! pirla! ahah..



finisco col sottolineare che molto probabilmente all'autore del mio libro su PyQt5 non gliene frega assolutamente nulla se ho mai visto o meno l'utilizzo della nostra fantomatica istruzione! e infatti scrive:

"If you've never seen this before, it's a common Python idiom that simply means: only run this code if this script is called directly."


l'autore me lo dice in maniera implicita, se non l'hai mai visto prima, sappi che questo è solo un idioma di Python e significa: "avvia questo codice solo se lo script è chiamato direttamente". che cosa significa? che forse anche uno studente ignorante come me può imparare a programmare interfacce grafiche? probabilmente si.


--- Ultima modifica di TurboC in data 2020-03-11 12:10:01 ---
Tieni presente che un forum non è una scuola gratuita a tua disposizione. Ti ho dato i link alla documentazione, ti ho spiegato come cercare quello che ti serve, ti ho spiegato anche grosso modo quello che succede in quelle quattro righe. Se non sono stato all'altezza delle tue esigenze, sorry. Se dopo aver letto la documentazione ti restavano dei dubbi, potevi chiedere. Ma dopo tutto vedo che alla fine hai visto, hai letto, hai capito... Bene così.


Gentilmente, tieni anche presente questo: https://it.wikipedia.org/wiki/RTFM





Pagina: 1



Esegui il login per scrivere una risposta.