Topic: come utilizzare sympy in pyqt5  (Letto 323 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline sibelius

  • python unicellularis
  • *
  • Post: 26
  • Punti reputazione: 0
  • Gutta cavat lapidem
    • Mostra profilo
    • mangiando ciambelle
come utilizzare sympy in pyqt5
« il: Febbraio 18, 2020, 07:26 »
Buongiorno a tutti
Avrei una domanda; ossia e' possibile importare la libreria sympy nella libreria pyqt5?
Per capirci meglio vorrei far interagire ad esempio l'oggetto PlainTextEdit oppure QLineEdit con I comandi della libreria sympy.
metto appena sotto due pezzettini piccoli piccoli di codice per Qt il primo e il secondo e' quello che vorrei fare
Grazie a tutti in anticipo.
#questa funzione ritorna un numero dall'inserimento di un numero dopo un'operazione matematica
    def collect_float(self):
           numeri = self.FUNZIONE_2.toPlainText()
           numeri = float(numeri)*2
           self.RISULTATO_2.setText(str(numeri))

questo sotto invece e' quello che vorrei fare
def string_to_number(self):
           numeri = sympify(self.FUNZIONE_2.toPlainText())
          numeri = float(subs(x,3).evalf())
     #     numeri.subs(x,3).evalf()
           self.RISULTATO_2.setText(str(numeri))

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 334
  • Punti reputazione: 0
    • Mostra profilo
Re:come utilizzare sympy in pyqt5
« Risposta #1 il: Febbraio 18, 2020, 08:47 »
Avrei una domanda; ossia e' possibile importare la libreria sympy nella libreria pyqt5?

Che domanda "strana" ... lascerebbe intendere che "vorresti" integrare le due librerie ;)
Suppongo che, in realtà, Tu intenda utilizzare le "doti" della libreria sympy durante dei processi gestiti tramite interfaccia grafica sviluppata mediante la libreria qt : non cambia assolutamente niente rispetto ad un uso a linea di comando.

In sostanza ti importi sympy nello stesso modo di qualsiasi altra libreria e ne utilizzi le funzioni e gli oggetti nei processi gestiti dalla interfaccia grafica se non direttamente nelle funzioni di callback.

Nelle funzioni che Tu esponi, che se ho compreso bene calcolano un risultato da esporre, non credo Ti sia impedito di utilizzare la libreria sympy, a patto Tu abbia provveduto a dichiararne l'import.

... non conosco le qt ma, forse, potresti anche utilizzare un validatore per il Tuo scopo e nella definizione di quest'ultimo potresti anche utilizzare detta libreria sympy.

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.146
  • Punti reputazione: 9
    • Mostra profilo
Re:come utilizzare sympy in pyqt5
« Risposta #2 il: Febbraio 18, 2020, 15:46 »
> Che domanda "strana"

Si chiama "dare martellate alla cieca". E' partito da questo https://forumpython.it/pyqt/come-ottenere-un-valore-da-una-stringa-a-cui-e'-stato-assegnato-un-valore , al che ho più o meno intuito che stava cercando di fare algebra simbolica con una gui in Qy, gli ho vagamente consigliato di appoggiarsi a SymPy, ed ecco che puntuale come un orologio arriva lo stadio successivo... "come integrare etc etc?".
(e naturalmente poi *non lo so* se sta davvero cercando di fare una cosa generale come "algebra simbolica", oppure ha un problema molto più circoscritto che sarebbe risolvibile con un po' di pianificazione ad-hoc... va a sapere)

Ora, la risposta alla domanda sarebbe: certo, si può fare. Banalmente, prelevi dalla gui l'espressione che ti serve (espressa nei termini di simboli che hai già definito, oppure magari anche di simboli che prelevi anche loro dalla gui...), la passi a SymPy e la fai valutare/risolvere a SymPy. La gui è la parte banale. Tutto il resto, è più o meno difficile come seguire il tutorial di SymPy.

Ma la *vera* risposta è: non si impara Python a botte di post sui forum. Si prende un buon libro di base e lo si segue passo-passo, pagina per pagina, prendendosi un anno tranquillo di tempo. Poi si passa alle gui, e ai progetti di algebra simbolica, alle librerie complicate, etc. etc.

Offline sibelius

  • python unicellularis
  • *
  • Post: 26
  • Punti reputazione: 0
  • Gutta cavat lapidem
    • Mostra profilo
    • mangiando ciambelle
Re:come utilizzare sympy in pyqt5
« Risposta #3 il: Febbraio 18, 2020, 23:33 »
Grazie nuzzopippo e ricpol per le risposte.
Si nuzzopippo e' quello che hai detto.
Tutto e' partito da lontano, cerco di spiegare.
Avevo creato una macro in un programma che si chiama FreeCAD ed ad un certo punto volevo creare una finestra di dialogo dove poter inserire i parametri della macro senza dover ogni volta editarla, quindi ho creato la finestra con Qt designer e tutto funziona benissimo, l'unica cosa che mi costringeva ad editare la macro era il fatto di voler cambiare la funzione all'interno.
A questo punto per ovviare a questo "problema" ho voluto creare un'ulteriore Window box dove mi sarebbe piaciuto inserire l'espressione simbolica della funzione (ad esempio funzioni tipo x*x+3 oppure sin(x+1) etc. etc.).
Nel prosieguo di tentativo di risolvere questo punto il gentilissimo ricpol mi ha messo a conoscenza di questa libreria che si chiama sympy e a quel punto ho provato a leggere un tutorial ed a seguire gli esempi e sembrerebbe che questa libreria faccia al caso mio, ossia mi permette di inserire espressioni simboliche ed ottenere in corrispondenza di un determinato valore  x ad esempio,  il corrispondente numero.
A questo punto sono ritornato sul mio codice originario che ricpol ha correttamente indicato nel link e ho cercato, importando la libreria sympy a richiamare i suoi comandi all'interno.
Quel pezzo di codice che vedere sopra e' il mio tentativo di far quadrare le cose.
Sono perfettamente a conoscenza del fatto che Python non si impara in una notte e credo nemmeno in un anno e che dare martellate alla cieca non e' la via migliore per cercare risposte , noi tutti molte volte facciamo cose contro la logica ed io piu di molti altri, quindi siccome in tante occasioni per natura uso le mani molto di frequente e meno la testa vi chiedo umilmente di perdonare questa mia debolezza.
Allo stesso tempo pero' (sempre se interessati) vi prego di rispondere ai miei post perche' sono intimamente convinto del fatto che da ogni risposta si possa estrarre qualcosa di utile.
Grazie ancora del vostro aiuto.
Ciao.   

Offline sibelius

  • python unicellularis
  • *
  • Post: 26
  • Punti reputazione: 0
  • Gutta cavat lapidem
    • Mostra profilo
    • mangiando ciambelle
Re:come utilizzare sympy in pyqt5
« Risposta #4 il: Febbraio 19, 2020, 12:37 »
Ciao a tutti.
Leggendo il manuale di sympy (non tutto ehh, sono 2350 pagine) ho capito un po di cose, poche rispetto alla dimensione del manuale ma sufficienti a superare questo scoglio.
Posto qui sotto il pezzo di codice (giusto se qualcuno si trovasse nella mia situazione) che ho corretto e che funziona a meraviglia.
Ci tenevo inoltre a ringraziarvi personalmente entrambi nuzzopippo e RicPol ma in particolar modo RicPol perche' e' stata la parola "prelevi" che mi ha acceso la lampadina.
Ecco il pezzo di codice.
def string_to_number(self):
           x = symbols('x')
           numeri = sympify(self.FUNZIONE_2.toPlainText()).subs(x,3).evalf(4)
     #     self.RISULTATO_2.setText(str(print(numeri)))
           self.RISULTATO_2.setText(str(numeri))
     #QUI FINISCE LA FUNZIONE