Profilo di nuzzopippo

Nome nuzzopippo
Indirizzo email nuzzopippo@gmail.com
AvatarAvatar utenti
Messaggi11
Firma forum
Fatti non foste a viver come bruti...
  • Re: rilevamento pressione tasto (magari il tasto ESC)
    Forum >> Principianti
    Ciao @trescon




    Dovresti precisare il contesto di esecuzione in cui vuoi intercettare la tastiera, cioè se lo devi intercettare da shell o da interfaccia grafica, le modalità sono molto diverse.




    Se, come suppongo, lo devi intercettare da shell, le cose dipendono anche dal sistema operativo in uso, una breve ricerca mostra che esistono varie possibilità, p.e. keyboard od anche pynput, od altro ancora, in ogni caso, la gestione degli eventi di tastiera, in una shell testuale, è materia molto tosta, almeno per me, nella docs di pynput vi sono degli esempi interessanti utilizzanti i thread ... ma, magari, utenti più addentro sapranno dare indicazioni migliori.




    Se, invece, l'intercettazione deve avvenire in un contesto gestito da un framwork grafico, p.e. tkinter, il discorso è notevolmente più facile, essendo i vari widget predisposti alla gestione degli eventi, nello specifico di tkinter dovresti decidere quale widget dovrebbe fare il binding, magari il frame della finestra, nel link vi è un esempio in tal senso proprio all'inizio.


    Grazie Nuzzopippo per la riposta , allora io uso python 3 su linux (raspberry), la questione di cui sopra andrebbe utilizzata con un programma eseguito nella shell.

    Ho visto i tuoi suggerimenti e ho provato a installare keyboard con




    pip install keyboard




    Il comando finisce l'esecuzione regolarmente, ma se io in un programma phyton importo keyboard .... ottengo un errore che dice che il modulo non c'è.




    Come mai ?




    Grazie

    Malfunzionamento dell'editor (errore 404 d ngx) tornato indietro ho ripremuto "invia" si pregano i moderatori di eliminare questo post, grazie


    --- Ultima modifica di nuzzopippo in data 2020-09-18 13:52:54 ---
    Fatti non foste a viver come bruti...
  • Re: rilevamento pressione tasto (magari il tasto ESC)
    Forum >> Principianti
    ... allora io uso python 3 su linux (raspberry), la questione di cui sopra andrebbe utilizzata con un programma eseguito nella shell.
    Ho visto i tuoi suggerimenti e ho provato a installare keyboard con ...
    Il comando finisce l'esecuzione regolarmente, ma se io in un programma phyton importo keyboard .... ottengo un errore che dice che il modulo non c'è.

    Come mai ?
    Quel "Come mai" è una domanda cui mi è difficile rispondere, perché dipende da come Tu hai installato keyboard.

    Non conosco la distribuzione di raspberry ma quel pip install penso che operi per la versione 2.7 di python, nelle varie distro, correntemente, hanno operative due versioni di python, la 2.x e la 3.x e bisogna dare comandi specifici per la versione 3.




    Comunque :


    Il metodo più opportuno sempre e principalmente quando si sta "sperimentando" ed in particolar modo su linux è utilizzare un "Virtual Environment", con tale modalità non ho avuto difficoltà di sorta

    NzP:~$ cd py_workspace/prove/p_v
    NzP:~$ . bin/activate
    (p_v) NzP:~$ python -m pip install keyboard
    Collecting keyboard
      Downloading keyboard-0.13.5-py3-none-any.whl (58 kB)
         |████████████████████████████████| 58 kB 416 kB/s 
    Installing collected packages: keyboard
    Successfully installed keyboard-0.13.5
    (p_v) NzP:~$ python
    Python 3.8.2 (default, Jul 16 2020, 14:00:26) 
    [GCC 9.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import keyboard
    >>> help('keyboard')
    
    >>> exit()
    (p_v) NzP:~$ python -m pip list
    Package         Version  
    --------------- ---------
    certifi         2020.6.20
    cycler          0.10.0   
    keyboard        0.13.5   
    kiwisolver      1.2.0    
    matplotlib      3.3.1    
    numpy           1.19.1   
    Pillow          7.2.0    
    pip             20.0.2   
    pkg-resources   0.0.0    
    pyparsing       2.4.7    
    python-dateutil 2.8.1    
    setuptools      44.0.0   
    six             1.15.0   
    (p_v) NzP:~$ 
    
    così può non essere se lo installi a livello di sistema ordinario, sempre pessima idea in ambiente linux, perché potresti avere "complicazioni" dato che il sistema operativo utilizza ampiamente python, nelle versioni previste dalla distribuzione in uso.

    Suggerirei, per prima cosa, di verificare il caso che Tu abbia installato la versione per python 2.x, per farlo apri una shell python 2.x (comando "python") ed al prompt prova ad importare keyboard, poi apri una shell python 3.x (comando "python3") e fai la stessa cosa, se non ti da errori in python2 e ti da errori in python3 vuol dire che lo hai installato per python 2.

    Se è così NON installare direttamente in python 3 ma creati un venv con python3 e poi installalo nel venv attivato, come nel codice su, è la modalità più conveniente.




    ... se non è come ho supposto, ne parliamo.

    Fatti non foste a viver come bruti...
  • Re: rilevamento pressione tasto (magari il tasto ESC)
    Forum >> Principianti
    ... allora io uso python 3 su linux (raspberry), la questione di cui sopra andrebbe utilizzata con un programma eseguito nella shell.
    Ho visto i tuoi suggerimenti e ho provato a installare keyboard con ...
    Il comando finisce l'esecuzione regolarmente, ma se io in un programma phyton importo keyboard .... ottengo un errore che dice che il modulo non c'è.

    Come mai ?
    Quel "Come mai" è una domanda cui mi è difficile rispondere, perché dipende da come Tu hai installato keyboard.

    Non conosco la distribuzione di raspberry ma quel pip install penso che operi per la versione 2.7 di python, nelle varie distro, correntemente, hanno operative due versioni di python, la 2.x e la 3.x e bisogna dare comandi specifici per la versione 3.




    Comunque :


    Il metodo più opportuno sempre e principalmente quando si sta "sperimentando" ed in particolar modo su linux è utilizzare un "Virtual Environment", con tale modalità non ho avuto difficoltà di sorta

    NzP:~$ cd py_workspace/prove/p_v
    NzP:~$ . bin/activate
    (p_v) NzP:~$ python -m pip install keyboard
    Collecting keyboard
      Downloading keyboard-0.13.5-py3-none-any.whl (58 kB)
         |████████████████████████████████| 58 kB 416 kB/s 
    Installing collected packages: keyboard
    Successfully installed keyboard-0.13.5
    (p_v) NzP:~$ python
    Python 3.8.2 (default, Jul 16 2020, 14:00:26) 
    [GCC 9.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import keyboard
    >>> help('keyboard')
    
    >>> exit()
    (p_v) NzP:~$ python -m pip list
    Package         Version  
    --------------- ---------
    certifi         2020.6.20
    cycler          0.10.0   
    keyboard        0.13.5   
    kiwisolver      1.2.0    
    matplotlib      3.3.1    
    numpy           1.19.1   
    Pillow          7.2.0    
    pip             20.0.2   
    pkg-resources   0.0.0    
    pyparsing       2.4.7    
    python-dateutil 2.8.1    
    setuptools      44.0.0   
    six             1.15.0   
    (p_v) NzP:~$ 
    
    così può non essere se lo installi a livello di sistema ordinario, sempre pessima idea in ambiente linux, perché potresti avere "complicazioni" dato che il sistema operativo utilizza ampiamente python, nelle versioni previste dalla distribuzione in uso.

    Suggerirei, per prima cosa, di verificare il caso che Tu abbia installato la versione per python 2.x, per farlo apri una shell python 2.x (comando "python") ed al prompt prova ad importare keyboard, poi apri una shell python 3.x (comando "python3") e fai la stessa cosa, se non ti da errori in python2 e ti da errori in python3 vuol dire che lo hai installato per python 2.

    Se è così NON installare direttamente in python 3 ma creati un venv con python3 e poi installalo nel venv attivato, come nel codice su, è la modalità più conveniente.




    ... se non è come ho supposto, ne parliamo.

    Fatti non foste a viver come bruti...
  • Re: rilevamento pressione tasto (magari il tasto ESC)
    Forum >> Principianti
    Ciao @trescon




    Dovresti precisare il contesto di esecuzione in cui vuoi intercettare la tastiera, cioè se lo devi intercettare da shell o da interfaccia grafica, le modalità sono molto diverse.




    Se, come suppongo, lo devi intercettare da shell, le cose dipendono anche dal sistema operativo in uso, una breve ricerca mostra che esistono varie possibilità, p.e. keyboard od anche pynput, od altro ancora, in ogni caso, la gestione degli eventi di tastiera, in una shell testuale, è materia molto tosta, almeno per me, nella docs di pynput vi sono degli esempi interessanti utilizzanti i thread ... ma, magari, utenti più addentro sapranno dare indicazioni migliori.




    Se, invece, l'intercettazione deve avvenire in un contesto gestito da un framwork grafico, p.e. tkinter, il discorso è notevolmente più facile, essendo i vari widget predisposti alla gestione degli eventi, nello specifico di tkinter dovresti decidere quale widget dovrebbe fare il binding, magari il frame della finestra, nel link vi è un esempio in tal senso proprio all'inizio.

    Fatti non foste a viver come bruti...
  • Re: Tabella di verità not(A or B)
    Forum >> Principianti
    a e b sono dei valori booleani, se li stampi direttamente verranno stampati come tali.




    Un possibile alternativa, sarebbe stampare con condizione, alterando, leggermente, il Tuo codice :

    >>> def link(a, b):
    	if a or b:
    		return 'falso'
    	else:
    		return 'vero'
    
    	
    >>> tabella = [(False, False),
    	       (False, True),
    	       (True, False),
    	       (True, True)]
    >>> for a, b in tabella:
    	print('Vero' if a else 'Falso', 'Vero' if b else 'Falso', link(a,b))
    
    	
    Falso Falso vero
    Falso Vero falso
    Vero Falso falso
    Vero Vero falso
    >>> 
    


    Fatti non foste a viver come bruti...
  • Re: Avviare un programma Python da Phyton su Linux
    Forum >> Principianti
    In pratica i programmi sono 3 che utilizzano il framework Tkinter (2 per raccolta dati da Entry e una di test con un 30 circa di Button) e poi ce ne sono 2 di elaborazione dei dati senza interfaccia grafica e l’ultima che utilizza Tkinter con una 60ina di label, la Progressbar e tutto l’output dei comandi via seriale/rs485 su gpio su Raspberry.(Vendono controllate 9 schede in rs485 e una con il Gpio)

    Io potrei farne un programma unico, ma essendo novizio e poco praticante con le classe ho scelto di riunirli in un menù di avvio contenente de Button.
    Ora è arrivato il momento di “aggregare” il tutto 😩
    Mi sento un po' impudente continuando ad intervenire, in presenza di utenti molto più capaci di me, credo, però, di comprendere le Tue difficoltà, avendone a bizzeffe di mio.




    Riguardo alle "classi", temo che, purtroppo, devi sforzarti ad acquisirne i concetti, è necessario quando si parla di GUI, senza è difficilissimo realizzare qualcosa, ci si "incasina" per lo più.




    30 "Button", 60 "label"? ... mi è difficile immaginare ciò che richiedono i Tuoi "processi", principalmente non conoscendo le esigenze di un rapberry, Gpio e rs485.




    per un "assemblaggio buttonico" ho pensato di metterti disponibile il mio primo tentativo di far qualcosa in python/tkinter, sicuramente farà inorridire gli utenti capaci, dato che non considera per niente pep8 e pattern di design "decenti", però è relativamente semplice e funziona, potresti vederlo un pochino (assieme alle classi) quale possibile spunto generico, giusto una idea buttata la, magari Ti potrebbe essere utile.

    Sono 4 files (moduli) che dovrebbero risiedere nella stessa directory, servono a creare un set di icone serializzate (base64) da utilizzare nello sviluppo di proprie applicazioni python, se interessa comprendere la (pessima) strutturazione fatta se ne parla.

    Fatti non foste a viver come bruti...
  • Re: Avviare un programma Python da Phyton su Linux
    Forum >> Principianti
    Il mio intento era , per motivi di presunta incapacità’ assembrativa, di avere un’interfaccia semplice con una serie di Button che permette di avviare 5/6 procedure.py che vanno eseguite in ordine sequenziale. (Che per motivi di test ho sviluppato singolarmente)
    Quindi mi consigliate subprocess.... proverò ....
    Guarda, lungi da me l'idea di voler "consigliare" qualcosa, dato che, come Te, ignoro l'inglese, son vecchietto, ed ho molto da imparare ma :




    NON consiglierei facilmente "subprocess" in una sessione grafica (quel "Button") dato che un framework grafico agisce in una sua shell mentre i sub-processi agiscono in "loro" shell, con conseguenti difficoltà di comunicazione tra i processi, superabili, certo, comunque a costo di una certa "rigidità" che, magari, potrebbe essere ovviata con altri mezzi.

    Dato che stai parlando di codice python, penso che sarebbe il caso di valutare "per bene" l'approccio progettuale da tenersi (certo, magari ciò richiede un certo studio preliminare) perché un approccio "modulare" potrebbe dare dei vantaggi non disprezzabili (comunicazione, gestione eccezioni, etc.).




    ,,, comunque, se le 5/6 "procedure.py" sono complete ed a se stanti e si tratta solo di "lanciarle" in qualche modo potrebbe anche andar bene "subprocess" ma valuta bene ciò che a Te serve.

    Fatti non foste a viver come bruti...
  • Re: Avviare un programma Python da Phyton su Linux
    Forum >> Principianti
    Grazie Ricpol per la risposta... ma a parte l’orribilita’ della forma mi sai dire come mai il comando Python os.startfile funziona “sotto” window ma non sotto Linux.
    Lo dice molto chiaramente la documentazione, che indica "Availability: Windows", sotto linux semplicemente non è disponibile

    Python 3.6.9 (default, Jul 17 2020, 12:50:27) 
    [GCC 8.4.0] on linux
    Type "help", "copyright", "credits" or "license()" for more information.
    >>> import os
    >>> help('os.startfile')
    No Python documentation found for 'os.startfile'.
    Use help() to get the interactive help utility.
    Use help(str) for help on the str class.
    
    >>> from os import startfile
    Traceback (most recent call last):
      File "<pyshell#2>", line 1, in <module>
        from os import startfile
    ImportError: cannot import name 'startfile'
    >>> 
    Pertanto, dovresti utilizzare altre mezzi sotto linux, tipo "subprocess" o "os.popen()", etc., utilizzando comandi o accorgimenti propri di linux, per eseguirli (tipo shebang, permessi esecuzione, etc.).


    --- Ultima modifica di nuzzopippo in data 2020-08-23 08:13:51 ---

    --- Ultima modifica di nuzzopippo in data 2020-08-23 08:16:18 ---
    Fatti non foste a viver come bruti...
  • Re: come condividere l'istanza di una medesima classe ?
    Forum >> Programmazione Python >> GUI
    Ciao,
    perdonatemi sono nuove e sto ancora imparando.
    Ho questo script che mi crea una gui
    ...
    Qualcuno sa qual'è la tecnica da usare esattamente ?
    Ciao e buono studio :)

    La problematica che poni non è per niente chiara, e non si presta a risposta ben definita.

    In primo luogo la domanda in titolo "come condividere l'istanza di una medesima classe ?" farebbe pensare Tu stia interagendo a livello di soli script python, se fosse così cosa Ti impedirebbe di utilizzare uno script come sub-processo di un contesto funzionale "unico" (in un solo singolo programma, per chiarire).

    Una classe "istanziata" (un oggetto, quindi) può tranquillamente essere parametro di una funzione o di inizializzazione di un altra classe.

    Quando, poi, il processo di "partizionamento del disco", fosse in realtà una chiamata al sistema operativo su cui agisce la Tua procedura, sarebbe sempre possibile avviarlo, p.e. con subprocess, ma sarebbe MOLTO legato al sistema operativo in uso e, conseguentemente, dovrebbe rispettarne le modalità.

    Dovresti contestualizzare più precisamente il contesto, cosa hai fatto e quali difficoltà incontri.

    ... per altro, scrivi che stai imparando (come d'altronde anche io), forse lo sai già ma guarda che operare con GUI, chiamate di sistema e, magari anche, con programmazione concorrente, non sono esattamente argomenti da primo impatto, richiedono un bel po' di studio delle basi prima di affrontarli.

    Fatti non foste a viver come bruti...
  • Re: Creazione Slider/Cursore scorrevole
    Forum >> Principianti
    sì, sarebbe meglio iniziare a usare un gui framework serio... comunque vedo che anche tkinter ha un concetto limitato di timer... cerca in giro per root.after().

    Ciao, letto ieri questo post, @Ripol ha dato l'indicazione "giusta", non so se @trescon abbia risolto ma mi son divertito a realizzare quanto richiesto ed ho pensato di postarlo ... sperando che il codice venga rappresentato correttamente, vedo che nel rendering dei post c'è qualche problema di cui debbo impratichirmi

    import tkinter as tk
    from tkinter import ttk
    
    
    class MyApp(tk.Tk):
    
        def __init__(self):
            super().__init__()
            self.title('Pseudo cronometro')
            lbl = tk.Label(self, text='Minuti durata :')
            lbl.grid(row=0, column=0, sticky='ew')
            self.set_time = tk.Entry(self)
            self.set_time.grid(row=0, column=1, sticky='ew')
            self.prog_bar = ttk.Progressbar(self, mode='determinate')
            self.prog_bar['maximum'] = 60
            self.prog_bar['value'] = 0
            self.prog_bar.grid(row=1, column=0, columnspan=2, sticky='ew')
            self.dida = tk.Label(self, text='0', backgroun='yellow')
            self.dida.grid(row=2, column=0, columnspan=2, sticky='nsew')
            self.bt_num = tk.Button(self, text='Vai coi numeri',
                                      command=self._start)
            self.bt_num.grid(row=3, column=0, sticky='nsew')
            bt_close = tk.Button(self, text='Clicca me per chiudere',
                                 command=self.destroy)
            bt_close.grid(row=3, column=1, sticky='nsew')
            self.grid_rowconfigure(2, weight=1)
            self.grid_columnconfigure(0, weight=1)
            self.grid_columnconfigure(1, weight=1)
            self.minute = 0
            self.seconds = 0
            self.end = 0
            self.update()
    
        def _start(self):
            ends = self.set_time.get()
            if not ends or not ends.isdigit():
                return
            self.end = int(ends)
            self.dida.configure(text='0')
            self.set_time.configure(state='disabled')
            self.bt_num.configure(state='disabled')
            self.minute = 0
            self.seconds = 0
            self.update_data()
            
        def update_data(self):
            self.seconds += 1
            self.prog_bar['value'] = self.seconds
            if self.seconds >= 60:
                self.minute += 1
                self.seconds = 0
                self.dida.configure(text=str(self.minute))
            if self.minute < self.end:
                self.after(1000, self.update_data)
            else:
                self.set_time.configure(state='normal')
                self.bt_num.configure(state='normal')
    
    
    
    if __name__ == '__main__':
        app = MyApp()
        app.mainloop()
    Ciao ed un saluto a tutti Voi ... non ho trovato dove ci si possa presentare :)

    Fatti non foste a viver come bruti...