Profilo di nuzzopippo

Nome nuzzopippo
Indirizzo email nuzzopippo@gmail.com
AvatarAvatar utenti
Messaggi174
Firma forum
Fatti non foste a viver come bruti...
  • Re: Negozio
    Forum >> Principianti
    Lo avevo già visto e risolto i problemi esposti prima della mia risposta, mi chiedevo/chiedo però lo scopo di quel codice, suppongo sia un esercizio, in tal caso Ti avrei spiegato i punti critici e lasciato a te la soluzione ... dato che mi dici di eseguirlo, Ok, eccoti la soluzione, trova i Tuoi perché




    class VeganProducts:
        def __init__(self):
            self.products = {}  # Dictionary for storing products {product name: [quantity, purchase price, sale price]}
            self.sales = []  # List for recording sales [product name, quantity sold]
    
        def add_product(self, name, quantity, purchase_price, selling_price):
            if quantity < 0 or purchase_price < 0 or selling_price < 0:
                raise ValueError("The quantity, purchase price and selling price must be positive.")
    
            if name in self.products:
                self.products[name][0] += quantity
            else:
                self.products[name] = [quantity, purchase_price, selling_price]
    
        def list_products(self):
            print("Products available in the shop:")
            for name, details in self.products.items():
                print(f"{name}      {details[0]}        €{details[2]}")
    
        def register_sale(self):
            response = 'Y'
            vendita = []
            while response.upper() == 'Y':
                name = input("Enter the product name: ")
                quantity = int(input("Enter the available quantity: "))
                if name in self.products:
                    if self.products[name][0] >= quantity:
                        self.products[name][0] -= quantity
                        vendita.append([name, quantity])
                    else:
                        print(f'Quantità eccessiva, disponibile {self.products[name][0]}')
                else:
                    print(f'{name} : prodotto non disponibile.')
                response = input("Do you want to add a new product to sell? \n Press Y or N:   ")
    
            print('VENDITA REGISTRATA')
            total_price = 0
            for name, quantity in vendita:
                total_price += self.products[name][2] * quantity
                print(f"{quantity} X {name} : € {self.products[name][2]}")
            print(f"Totale € {total_price}")
            self.sales += vendita
    
        def show_profits(self):
            gross_profits = 0
            net_profits = 0
            for sale in self.sales:
                selling_price = self.products[sale[0]][2]
                costo = self.products[sale[0]][1]
                gross_profits += selling_price * sale[1]
                net_profits += selling_price * sale[1] - costo * sale[1]
            print(f"Gross profits: {gross_profits}")
            print(f"Net profits:: {net_profits}")
    
        def show_help_menu(self):
            print("Available commands:")
            print("1. Add product")
            print("2. Product list")
            print("3. Record sale")
            print("4. Help")
            print("5. Profits")
            print("0. Close")
    
        def exit(self):
            print("Exiting the program.")
            exit()
    
    def main():
        store = VeganProducts()
        store.show_help_menu()
        while True:
            choice = input("Enter the number corresponding to the desired action: ")
            if choice == "1":
                try:
                    name = input("Enter the product name: ")
                    quantity = int(input("Enter the available quantity: "))
                    purchase_price = float(input("Enter the purchase price: "))
                    selling_price = float(input("Enter the sales price: "))
                    store.add_product(name, quantity, purchase_price, selling_price)
                except ValueError as e:
                    print(e)
            elif choice == "2":
                store.list_products()
            elif choice == "3":
                store.register_sale()
            elif choice == "4":
                store.show_help_menu()
            elif choice == "5":
                store.show_profits()
            elif choice == "0":
                break
            else:
                print("Invalid choice. Try again.")
    
    if __name__ == "__main__":
        main()


    Fatti non foste a viver come bruti...
  • Re: Negozio
    Forum >> Principianti
    L'output da Te esposto NON PUÒ essere prodotto dal codice che hai allegato, quindi, che cosa stai effettivamente chiedendo?
    Fatti non foste a viver come bruti...
  • Re: Utilizzo Socket
    Forum >> Principianti
    Si, ho visto, ho visto anche che hai modificato alcune cose che ...




    Il problema è l'inizializzazione, lascia invariato pkt_gui_rcs_support

    in pkt_gui_rcs commenta queste righe come esposto:

    '''global textB1
    global textB2
    
    textB1 = "Bottone 1"
    textB2 = "Bottone 2"
    '''
    Alla fine della definizione della finestra inserisci quello che ho aggiunto sotto

    ...
            self.pub.subscribe('LISTENERS', self.obs)
            top.after_idle(self.update_controls)
    
        def update_controls(self):
            self.POSTAZIONE.configure(text=pkt_gui_rcs_support.PST)
            self.RadiobuttonRIT.configure(text=pkt_gui_rcs_support.textB2) # Radio Button n.2
            self.RadiobuttonNP.configure(text=pkt_gui_rcs_support.textB1)
    
            
        def obs(self, message: list) -> None:
    ...
    
    commenta nel codice della finestra le istruzioni

            #self.RadiobuttonNP.configure(text=textB1) #Radio Button n.1
            #self.RadiobuttonRIT.configure(text=textB2) # Radio Button n.2
    
    e funzionerà




    Purtroppo, bisogna comprendere un po' le cose, in fase di inizializzazione non si può riferire a variabili di un altro modulo, solo ad inizializzazione completata può essere fatto, la istruzione "after_idle" serve a far eseguire del codice terminato un ciclo di esecuzione della finestra (e quindi ad inizializzazione conclusa).




    Fai sapere

    Fatti non foste a viver come bruti...
  • Re: Utilizzo Socket
    Forum >> Principianti
    Pietro Bruno Lancerotto said @ 2024-05-13 13:28:32:
    Evitiamo per il momento di affrontare l'intera strutturazione (3 file? prima erano 2)

    Il terzo è utility.py che hai realizzato Tu :)
    C'è poi il quarto, e cioè Terminale.ini
    Credo sia opportuno aggiornare il tutto allo status attuale per cui allego lo zip con tutto il malloppo
    ...
    Già, avevo dimenticato utility ...

    In ogni caso, il problema posto è stato superato?

    Fatti non foste a viver come bruti...
  • Re: Utilizzo Socket
    Forum >> Principianti
    Evitiamo per il momento di affrontare l'intera strutturazione (3 file? prima erano 2)

    Dal codice inserito su, vedo che nel momento in cui instanzi "_w1" le variabili globali che vorresti utilizzare nella costruzione della gui non sono neanche dichiarate ... purtroppo, la strutturazione del codice è MOLTO importante, credo sia questa l'origine del problema, prova a strutturare come lo stralcio sotto
    ...
    terminale = None
    
    root = None
    
    PST = ''
    textB1 = ''
    textB2 = ''
    mexB1 = ''
    mexB2 = ''
    
    
    #****************************************
    
    def initialize():
        global PST
        global textB1
        global textB2
        global mexB1
        global mexB2
    
        f = open("Terminale.ini", "r")
        serverName = (f.readline()).strip("\n")
        serverPort = int(f.readline())
        PST = (f.readline()).strip("\n")
        textB1 = (f.readline()).strip("\n")
        textB2 = (f.readline()).strip("\n")
        mexB1 = (f.readline()).strip("\n")
        mexB2 = (f.readline()).strip("\n")
        f.close()
        
    
    def main(*args):
        '''Main entry point for the application.'''
        initialize()
        global root
        root = tk.Tk()
        #root.protocol( 'WM_DELETE_WINDOW' , root.destroy) - sostituita in PAGINA
        # Creates a toplevel widget.
        global _top1, _w1
        _top1 = root
        _w1 = pkt_gui_rcs.PAGINA(_top1)
    
        #global PST
        #PST = "GENERICI"
    
        global terminale
    
        serverName = "localhost"
    ...
    
    certezza non ho ma penso che il problema lamentato dovrebbe risolversi.
    Inoltre, data l'inizializzazione di PST la ridefinizione dello stesso in "main" dovrebbe essere ridondante, perciò la ho commentata.

    Fai sapere

    P.S. : impara ad utilizzare il tasto "code" (<>) nell'editor dei post, essere chiari è importantissimo.
    edit: corretto uno strafalcione



    Ciao



    --- Ultima modifica di nuzzopippo in data 2024-05-13 08:44:18 ---
    Fatti non foste a viver come bruti...
  • Re: Utilizzo Socket
    Forum >> Principianti
    Pietro Bruno Lancerotto said @ 2024-05-12 10:49:53:
    ...
    Ovviamente sono a chiederTi in che modo traslare le due variabili textB1 e textB2 da un modulo all'altro
    Sinceramente, non ho ben capito cosa hai fatto, la natura del "problema" e "quando" il problema si presenta, leggere il traceback non sarebbe male.




    Comunque, riepiloghiamo il certo : hai bisogno di cambiare il testo del controllo ptk_gui_rcs.PAGINA.RadiobuttonNP




    Per poter cambiare il testo di un controllo, l'istanza alla classe PAGINA deve già essere inizializzata, così come devono già essere già caricate in memoria le variabili contenenti il testo, indipendentemente da dove siano collocate, domanda : la variazione del testo deve avvenire a oggetti già completamente inizializzati od in fase di caricamento?

    Dubbio corollario, essendo il target un radiobutton, che senso ha cambiare il testo? è il "value" ciò che entrerebbe realmente in gioco




    Poi, c'è da considerare il contesto in cui avviene la modifica, è in ptk_gui_rcs o in ptk_gui_rcs_support?




    Chiarisci tali dettagli, poi vediamo che si fa.




    Ciao

    Fatti non foste a viver come bruti...
  • Re: Valori sui markers in matplotlib
    Forum >> Programmazione Python >> Calcolo scientifico
    Se volessimo trovare un difetto a matplotlib potremmo dire che è "troppa", ci si perde nella abbondanza di funzioni che presenta e nelle correlazioni relative.

    Credo che il metodo più probabilmente adatto a ciò che chiedi sia "matplotlib.pyplot.annotate", ma ne esistono altri, anche specializzati per tipi di grafico ... alcuni esempi d'uso di annotate da una discussione su stackoverflow

    Fatti non foste a viver come bruti...
  • Re: stampare un codice a barre su stampante termica raspberry pi
    Forum >> Programmazione Python >> Files e Directory
    Hai letto/provato il capitolo "Printer implementation"?

    ... Purtroppo, in materia non posso eseguire test per farmene un'idea personalmente, ho rinunciato alle stampanti casalinghe anni fa (disgustato dai chip che le "scaricano") e, se proprio ne ho bisogno, ricorro alle cartolerie.




    Per altro, i processi di stampa sono fortemente legati ai vari sistemi operativi ed ai driver proprietari, neanche io ho trovato nulla di attendibile gestibile direttamente in python, a quanto ne so bisognerebbe interfacciarsi ai processi del sistema operativo oppure ricorrere alle librerie grafiche che ho prima citato, od anche crearsi un pdf dalle opportune caratteristiche e poi lanciare la stampa con i processi di sistema.

    Fatti non foste a viver come bruti...
  • Re: stampare un codice a barre su stampante termica raspberry pi
    Forum >> Programmazione Python >> Files e Directory
    Non ho nessuna esperienza tanto di bar-code quanto di stampa diretta con python, so che wx w qt forniscono interfacce per la stampante ma finisce li.

    In rete go trovato la documentazione di "python-escpos" che, forse, potrebbe esserTi utile, la segnalo in attesa di interventi migliori

    Fatti non foste a viver come bruti...
  • Re: matplotlib grafico con sfumatura
    Forum >> Programmazione Python >> GUI
    Bastava un semplice comando (layout='constrained') per risolvere il problema delle scritte.
    Rabe da matti, non sai quanto tempo che ho perso.... :thinking:
    beh ... dato che "Figure" serve per sostituire plot per generare una immagine nel canvas, io ho semplicemente immaginato che "dovesse" avere i metodi per controllare la rappresentazione grafica e, quindi, letta la Tua domanda, sono andato direttamente documentazione relativa, risolvendo in un paio di minuti ...
    Una chicca : prova a commentare e de-commentare l'istruzione
    ag.fill_between(Xv , Yv, facecolor=col, alpha=0.2 ) #thistle

    vedrai una leggera differenza nella sfumatura ... penso stia meglio con questa istruzione attiva, ma è interessante imho ;)




    Edit: mi è venuto in mente adesso, tempo fa su un sito aperto solo a me scrissi un appunto, giusto a mia promemoria, circa tkinter e matplotlib.

    La storia delle sfumature verticali trattata è interessante e l'esempio da Te proposto è decisamente carino, mi piacerebbe approfondire un po' l'argomento per poi inserirlo do seguito, giusto per tenerne traccia, tra un anno chi se ne ricorda più ... potrei utilizzare il Tuo esempio?




    --- Ultima modifica di nuzzopippo in data 2024-05-06 14:28:01 ---
    Fatti non foste a viver come bruti...