Topic: Come ottenere un valore da una stringa a cui e' stato assegnato un valore???  (Letto 285 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
Salve a tutti, scusate il gioco di parole; provero' a descrivere meglio il problema.
Allora; ho costruito una finestra con PYQt5; la finestra appare correttamente e fa quello che deve fare.
Allego i tre file che compongono il lavoro.
file numero 1 che si chiama piano3.py;
file numero 2 che si chiama piano3Main.py
fine numero 3 che si chiama piano3.ui
questi tre files devono essere copiati dentro una cartella se si vuole creare la finestra.
una volta copiati apro nella consolle python il file piano3Main.py e lancio il run; la finestra appare.
Per come e' stato costruito il codice (che mi serve per capire una cosa che al momento non so) accetta solo valori inseriti nel box chiamato FUNZIONE.
Nel box chiamato FUNZIONE posso inserire numeri ( se collego la funzione preposta al bottone preposto ed a questo proposito basta cambiare nel connect button il nome della funzione che si vuole testare)
Nel box chiamato FUNZIONE posso inserire stringhe (quindi anche numeri) sempre ricordandomi di cambiare il nome della funzione nel connect button.
Allora a questo punto ho testato due funzioni; una che se inserisco un numero nel box mi restituisce un numero oppure il risultato matematico di una operazione che ho fatto fare al numero inserito; quindi qui la situazione e' di un numero che mi restituisce un numero.
Nell'altro caso ho una stringa che mi restituisce una stringa.

Ora il problema che mi pongo e' il seguente.
Supponiamo di aver definito una nuova funzione all'interno della quale ad esempio assegno a due variabili x e y i seguenti valori x=10 e y=10; ora supponiamo di voler scrivere nella box FUNZIONE la seguente cosa x+y*3 oppure sin(x)+cos(y) e di voler ottenere come risultato un numero che corrisponde al calcolo matematico di quelle funzioni; ossia nel caso scelga di scrivere x+y*3, vorrei poter visualizzare nell'altro box di RISULTATO il valore 40, cioe' (10+10*3).

qualunque idea ed aiuto e' sempre benvenuto.
grazie a tutti in anticipo.
PS per questioni pratiche e' meglio mantenere i nomi dei file cosi' come li ho impostati cosi' non bisogna modificare il codice.

file piano3.py
# -*- coding: utf-8 -*-

################################################################################
## Form generated from reading UI file 'piano2.ui'
##
## Created by: Qt User Interface Compiler version 5.14.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide2.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
    QRect, QSize, QUrl, Qt)
from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
    QFontDatabase, QIcon, QLinearGradient, QPalette, QPainter, QPixmap,
    QRadialGradient)
from PySide2.QtWidgets import *


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        if Dialog.objectName():
            Dialog.setObjectName(u"Dialog")
        Dialog.resize(400, 300)
        self.larghezza = QLabel(Dialog)
        self.larghezza.setObjectName(u"larghezza")
        self.larghezza.setGeometry(QRect(40, 120, 47, 13))
        self.altezza = QLabel(Dialog)
        self.altezza.setObjectName(u"altezza")
        self.altezza.setGeometry(QRect(40, 50, 47, 13))
        self.piano = QLabel(Dialog)
        self.piano.setObjectName(u"piano")
        self.piano.setGeometry(QRect(40, 10, 47, 13))
        self.altezza_inserisci = QPlainTextEdit(Dialog)
        self.altezza_inserisci.setObjectName(u"altezza_inserisci")
        self.altezza_inserisci.setGeometry(QRect(100, 40, 61, 31))
        self.larghezza_inserisci = QPlainTextEdit(Dialog)
        self.larghezza_inserisci.setObjectName(u"larghezza_inserisci")
        self.larghezza_inserisci.setGeometry(QRect(100, 110, 61, 31))
        self.OK = QPushButton(Dialog)
        self.OK.setObjectName(u"OK")
        self.OK.setGeometry(QRect(70, 190, 75, 23))
        self.FUNZIONE_2 = QPlainTextEdit(Dialog)
        self.FUNZIONE_2.setObjectName(u"FUNZIONE_2")
        self.FUNZIONE_2.setGeometry(QRect(220, 50, 104, 71))
        self.FUNZIONE = QLabel(Dialog)
        self.FUNZIONE.setObjectName(u"FUNZIONE")
        self.FUNZIONE.setGeometry(QRect(230, 20, 71, 16))
        self.RISULTATO_2 = QTextEdit(Dialog)
        self.RISULTATO_2.setObjectName(u"RISULTATO_2")
        self.RISULTATO_2.setGeometry(QRect(220, 160, 104, 71))
        self.RISULTATO = QLabel(Dialog)
        self.RISULTATO.setObjectName(u"RISULTATO")
        self.RISULTATO.setGeometry(QRect(220, 140, 71, 16))

        self.retranslateUi(Dialog)

        QMetaObject.connectSlotsByName(Dialog)
    # setupUi

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"Dialog", None))
        self.larghezza.setText(QCoreApplication.translate("Dialog", u"larghezza", None))
        self.altezza.setText(QCoreApplication.translate("Dialog", u"altezza", None))
        self.piano.setText(QCoreApplication.translate("Dialog", u"piano", None))
        self.OK.setText(QCoreApplication.translate("Dialog", u"OK", None))
        self.FUNZIONE.setText(QCoreApplication.translate("Dialog", u"FUNZIONE", None))
        self.RISULTATO.setText(QCoreApplication.translate("Dialog", u"RISULTATO", None))
    # retranslateUi

file piano3Main.py
###Be carefully you can test this functions only in the box called FUNZIONE
import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication, QDialog
from PyQt5.uic import loadUi

class MainPage(QDialog):
    def __init__(self):
        super(MainPage,self).__init__()
        loadUi('piano3.ui', self)
    #collego il bottone alla funzione
    #   self.OK.clicked.connect(self.la funzione che voglio collegare)
        self.OK.clicked.connect(self.collect_float)
       
    #QUESTA SOTTO SONO LE FUNZIONI

    #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))
    #QUI FINISCE LA FUNZIONE


    #questa funzione ritorna una stringa dall'inserimento di una stringa
    def collect_strings(self):
           parole = self.FUNZIONE_2.toPlainText()
           self.RISULTATO_2.setText(parole) 
     #QUI FINISCE LA FUNZIONE


"""
    def string_to_number(self):
           X = 10
           Y = 20
   
           parole = self.FUNZIONE_2.toPlainText()
           self.RISULTATO_2.setText(parole) 
     #QUI FINISCE LA FUNZIONE
"""

app = QApplication(sys.argv)
widget = MainPage()
widget.show()
sys.exit(app.exec_())

il file piano3.ui seguira' quando capisco come inviare allegati
« Ultima modifica: Febbraio 16, 2020, 04:51 da sibelius »

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.146
  • Punti reputazione: 9
    • Mostra profilo
Abbi pazienza ma questo post è scritto in una lingua che io non riesco a comprendere. In ogni caso, intuisco che vuoi fare algebra simbolica e se è così ti consiglierei di appoggiarti a Sympy, o cose del genere.

Offline sibelius

  • python unicellularis
  • *
  • Post: 26
  • Punti reputazione: 0
  • Gutta cavat lapidem
    • Mostra profilo
    • mangiando ciambelle
Ciao.
Grazie mille per l'intervento.
Si uno degli scopi e' l'algebra applicata a...….
In partica cercavo di creare una window-box dove poter inserire stringhe del tipo X*X o cose del genere e ottenere in risposta su un altra window-box il risultato con I valori che avevo assegnato in precedenza a X. 
Mi dici cos'e' Simpsy, non l'ho mai sentito, io uso su Linux Maxima e GNUplot.
PS hai un'idea del perche' non riesco ad allegare un file .ui di 3Kb perche' mi dice che c'e' un errore di dimensione cartella?
Grazie mille dell'aiuto.
ciao

 

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.146
  • Punti reputazione: 9
    • Mostra profilo
Guarda, il minimo sindacale è usare "eval":

>>> a = 10 # questo, poniamo, è una casella di input
>>> b = 20 # altra casella
>>> expression = "a * 10 + b" # altra casella di input
>>> eval(expression) # questo avviene al clic su un pulsante
120

Ora, se non ti viene proprio nessun brivido a fare una cosa del genere, allora vai pure avanti senza problemi. Il computer è tuo...
Viceversa, dovresti scriverti un parser, o formulare comunque il tuo problema in un modo più stringente. Tutto questo non c'entra assolutamente niente con le gui e con le Qt, beninteso.
Appoggiarti a un framework già esistente in questi casi può essere una buona idea. Se non lo hai mai sentito, puoi googlare senza problemi... occorre solo la concentrazine necessaria a scriverlo correttamente: SymPy e non "Simpsy".

Uhm, da molto tempo ormai questo forum ha problemi con gli allegati pesanti... e in generale è un bene che sia così. L'ideale sarebbe impedire completamente gli allegati. Un forum non è fatto per scambiare centinaia di righe di codice... chi chiede aiuto e consiglio su un forum dovrebbe avere la cortesia operativa di formulare il suo problema in modo sintetico, scrivendo appositamente una versione ridotta all'osso del suo codice, che evidenzia il problema ed elimina tutte le parti che non c'entrano col problema. Scaricare un dump di centinaia di righe ingarbugliate è molto facile per chi pone la domanda, ma rende difficile il lavoro di chi vorrebbe rispondere.
Impedire o limitare gli allegati aiuta un pochino a orientare le persone verso alcune regole di netiquette. Poi, nei casi dove proprio c'è bisogno di sottoporre porzioni estese di codice, si può sempre appoggiarle su pastebin o cose del genere, e mettere solo il link nel post.

Offline sibelius

  • python unicellularis
  • *
  • Post: 26
  • Punti reputazione: 0
  • Gutta cavat lapidem
    • Mostra profilo
    • mangiando ciambelle
Ciao, grazie della risposta.
Da come presenti il minimo sindacale, sembra un contratto da operaio in una catena di montaggio FIAT.
Non ci provo col minimo sindacale!
Non so come si scrive un parser in Python, provero' a cercare una guida.
A proposito ho trovato SimPy e ho scoperto che e' una libreria; io credevo fosse un programma a se stante e quando ho messo in google simpy mi ha indirizzato a una casa di accoglienza per persone con disturbi mentali e cosi' ho pensato che volevi prendermi in giro, poi ho capito che era colpa mia.
Grazie della segnalazione e abbi pazienza se sono un lento a capire anzi lentissimo, mia madre mi ha detto che sono caduto dal divano a 7 mesi e ho avuto un bernoccolo per una settimana e poi faccio passi da gambero, due in avanti e tre indietro e anche quando ho capito poi mi dimentico e devo guardare gli appunti.
 Tuttavia sono sicuro che in una decina di anni se saro' in vita imparero' alcune basi di questo fantastico linguaggio.
Grazie ancora.
ciao.
« Ultima modifica: Febbraio 17, 2020, 23:59 da sibelius »