nuzzopippo
Profilo di
Nome | nuzzopippo |
---|---|
Indirizzo email | nuzzopippo@gmail.com |
Avatar | ![]() |
Messaggi | 214 |
Firma forum | |
Fatti non foste a viver come bruti... |
-
- 2025-05-11 08:45:52
- Re: Export immagine Turtle
- Forum >> Principianti
-
beh, il mio voleva essere un semplice "la", mi aspettavo Tu ricorressi alla documentazione di tkinter.canvas per vedere un po' come vanno le cose, in tal caso, consultando la documentazione a proposito di tkinter.canvas.poscript avresti notato che vi sono vari parametri possibili, alcuni tra cui "dovrebbero" riferire alla "tela" del canvas, che ha coordinate proprie non inerenti quelle di visualizzazione dello schermo.
Tra l'altro, tkinter.canvas, ha la proprietà "bbox(namewidget)" che permette di estrarre le coordinate del rettangolo di contenzione di ogni singolo item disegnato (con "all" si ottengono le coordinate di contenzione dell'intero disegno) ... non mi ero impelagato ad approfondire, dato che non hai indicato il codice per ottenere il grafico per Te problematico.
Comunque, stante il Tuo problema, ho guardato un po', calcolandosi le coordinate della tela e valorizzando gli opportuni parametri di postscript riesco ad ottenere il disegno completo anche con gli elementi al di fuori della finestra, per far ciò ho raddoppiato il numero dei triengoli ed implementato le considerazioni sopra, il codice :
import turtle from PIL import Image from io import BytesIO # DISEGNA tart = turtle.Turtle() tart.color('red') for j in range(360): for i in range(4): tart.forward(50+j) tart.left(90) tart.left(4) wdg = turtle.getcanvas() # recupera lo scrolled_canvas # coordinale e dimensioni della sola immagine x1, y1, x2, y2 = wdg.bbox('all') w, h = x2 - x1, y2 - y1 # SALVA # applica i dati calcolati e crea il postscript della sola immagine ps_data = wdg.postscript(colormode = 'color', x = x1, y = y1, width = w, height = h) im = Image.open(BytesIO(bytes(ps_data, 'ascii'))) # crea una immagine dai dati im.save('test_03.png') #la salva
ed a me funziona benissimo, provalo e fai sapere.
N.B. : le immagini sono cose complesse, tieni presente che potresti avere altri generi di problemi, tipo sui colori per differenze di palette, ovvero problemi sui pixel, se ricordo bene postscript e Image sono entrambi raw ma ps opera su 96 DPI mentre Image su 72 DPI, convertendo in formati bitmap potrebbero essere introdotti artefatti, corregibili con metodi di proporzionamento vari, gli altri parametri di postscript potrebbero essere d'aiuto.
CiaoFatti non foste a viver come bruti...
-
- 2025-05-10 12:03:01
- Re: Export immagine Turtle
- Forum >> Principianti
-
Non utilizzo turtle ma la Tua domanda mi ha intrigato, partendo dal presupposto che turtle si basa su tkinter, utilizzando la funzione "getcanvas()" di turtle si può estrarre ed utilizzare il canvas in maniera ordinaria.
Neanche "salvare" i contenuti di un canvas è cosa che ordinariamente faccio, però i canvas possono salvare il loro contenuto in formato postscript.
Utilizzando la classe Image di pillow, tali dati possono essere caricati e salvati in uno dei formati supportati da pillow, ti faccio un esempio:
import turtle from PIL import Image from io import BytesIO # DISEGNA tart = turtle.Turtle() tart.color('red') for j in range(180): for i in range(4): tart.forward(50+j) tart.left(90) tart.left(4) wdg = turtle.getcanvas() # recupera lo scrolled_canvas # SALVA ps_data = wdg.postscript(colormode='color') # memorizza il contenuto come fosse # un file postscript im = Image.open(BytesIO(bytes(ps_data, 'ascii'))) # crea una immagine dai dati im.save('test_02.png') #la salva
lo script utilizza turtle per disegnare 180 quadrati in rosso, che nel loro insieme danno una doppia spirale piuttosto carina, poi vengono applicati i concetti sopra detti per creare una immagine png nella cartella di lancio.
Per utilizzare lo script si deve avere pillow installato, magari in un venv, sotto linux funziona tranquillamente, non saprei dire in ambiente windows (non lo uso)
Spero Ti sia utileFatti non foste a viver come bruti...
-
- 2025-05-09 16:12:25
- Re: Le classi queste sconosciute
- Forum >> Principianti
-
Ciao @Trescon ... finalmente un post che non sia di spammer o bot ...
Il Tuo problema deriva certamente da come implementi ed utilizzi le Tue classi, impossibile dare risposte utili dato che non hai fornito praticamente nulla di valido in merito alle Tue implementazioni.
Comunque, penso che il capitolo 9 del manuale Ti possa essere utile, approfondisci particolarmente i capitoli 9.2 e 9.3.1-9.3.5 e fai prove sino ad assimilare la materia.
Il traceback che hai postato indica chiaramente che hai cercato di utilizzare proprietà di oggetti di classe "Conversione_date" come se tali proprietà facessero parte di widget tkinter ... le cose non funzionano così, a meno Tu non abbia creato dei sub-classamenti con classi-madre multiple, tra cui "Conversione_date", cosa che non credo.
Le proprietà di un oggetto istanziato restano di proprietà dell'oggetto stesso, non di quello che lo istanzia, anche se l'oggetto è definito quale variabile di istanza del chiamente ... provo a farTi un esempio ridefinendo lo stralcio di classe da Te postato in modo che scinda una lista di stringhe sulla base del "promo" iniziale
Python 3.12.3 (main, Feb 4 2025, 14:48:35) [GCC 13.3.0] on linux Type "help", "copyright", "credits" or "license()" for more information. class Conversione_date: def __init__(self): self.file_modificati = [] self.file_modificati_giornalieri = [] def converti_data_promo(self, data): # qui ci sono scariate riche di codice che non utilizzano # le variabili "inquisite" for d in data: if d.startswith("promo"): self.file_modificati_giornalieri.append(d) else: self.file_modificati.append(d) values = ['Televisore', 'lavatrice', 'promo lavatrice', 'cellulare', 'promo cellulare', 'lavastoviglie', 'piano corruta'] class A: def __init__(self): self.cvd = Conversione_date() self.cvd.converti_data_promo(values)
Istanziando un oggetto di classe "A" noi non potremo riferire direttamente alle liste contenute dalle istanze a Conversione_date
gest = A() gest.file_modificati_giornalieri Traceback (most recent call last): File "/usr/lib/python3.12/idlelib/run.py", line 580, in runcode exec(code, self.locals) File "<pyshell#15>", line 1, in <module> AttributeError: 'A' object has no attribute 'file_modificati_giornalieri'
ma dovremo riferire alla istanza a Conversione_date memorizzata (self.cvd)
gest.cvd.file_modificati_giornalieri ['promo lavatrice', 'promo cellulare'] gest.cvd.file_modificati ['Televisore', 'lavatrice', 'cellulare', 'lavastoviglie', 'piano corruta']
Lo stralcio di traceback da Te proposto indica che sei ricaduto in questo tipo di problema.
Spero Ti sia utile, ciaoFatti non foste a viver come bruti...
-
- 2024-12-20 09:22:04
- Re: Chiarimento sull'uso del metodo "subprocess.Popen".
- Forum >> Programmazione Python >> Scripting
-
Aggiornamento:
A giudicare da quanto letto, partendo da questa pagina, mi son convinto che "adb" esegua un comando alla volta e poi ritorni immediatamente, no vi dovrebbe essere una shell disponibile, quindi la modalità "interattiva" richiesta dallo OP non vale la pena di essere perseguita (ci risparmiamo un po' di thread per lettura/scrittura e relativa queue).
Il mio dispositivo di test dispone di Android 5.0, quindi va a farsi benedire l'accesso in rete riportato nel link, può essere utilizzato solo su usb, approfittando del fatto che deve essere l'unico dispositivo connesso con tale modalità (adb darebbe errore altrimenti), ho verificato che è possibile tranquillamente navigare il file-system del cellulare e copiarsi dei files li depositati, vedere sessione sotto (ridotta per quanto possibile)
Python 3.12.3 (main, Nov 6 2024, 18:32:19) [GCC 13.2.0] on linux Type "help", "copyright", "credits" or "license()" for more information. import subprocess as sp result = sp.check_output(['adb', 'devices', '-l']) result b'List of devices attached\n0123456789ABCDEF device usb:3-8 product:V10_open_eu model:LG X150 device:v10 transport_id:1\n\n' result = sp.check_output(['adb', 'shell', 'ls', '-l', '/']) text = result.decode() data = text.split('\r\n') for r in data: print(r) drwxr-xr-x root root 2010-01-01 01:47 acct drwxrwx--- system cache 2010-01-01 01:07 cache lrwxrwxrwx root root 1970-01-01 01:00 charger -> /sbin/healthd dr-x------ root root 2010-01-01 01:47 config ... -rw-r--r-- root root 30298 1970-01-01 01:00 file_contexts lstat '//flex' failed: Permission denied -rw-r----- root root 1712 1970-01-01 01:00 fstab.mt6582 ... -rw-r--r-- root root 11264 1970-01-01 01:00 service_contexts drwxr-x--x root sdcard_r 2010-01-01 01:47 storage dr-xr-xr-x root root 2010-01-01 01:47 sys drwxr-xr-x root root 1970-01-01 01:00 system ... result = sp.check_output(['adb', 'shell', 'ls', '-l', '/storage']) text = result.decode() data = text.split('\r\n') for r in data: print(r) drwxr-xr-x media_rw media_rw 2010-01-01 01:47 emulated lrwxrwxrwx root root 2010-01-01 01:47 sdcard0 -> /storage/emulated/legacy drwxrwx--x root sdcard_r 1970-01-01 01:00 sdcard1 drwx------ root root 2010-01-01 01:47 usbotg result = sp.check_output(['adb', 'shell', 'ls', '-l', '/storage/sdcard1']) text = result.decode() data = text.split('\r\n') for r in data: print(r) drwxrwx--x root sdcard_r 2014-02-03 08:40 Android drwxrwx--- root sdcard_r 2014-02-03 08:38 DCIM drwxrwx--- root sdcard_r 2014-02-03 08:32 LOST.DIR drwxrwx--- root sdcard_r 2016-06-25 12:03 Recording drwxrwx--- root sdcard_r 2015-10-25 15:05 bluetooth drwxrwx--- root sdcard_r 2020-10-06 17:54 documents drwxrwx--- root sdcard_r 2021-05-30 06:32 download drwxrwx--- root sdcard_r 2014-02-03 08:32 foursquare drwxrwx--- root sdcard_r 2014-06-03 07:49 musica drwxrwx--- root sdcard_r 2018-07-30 12:12 video result = sp.check_output(['adb', 'shell', 'ls', '-l', '/storage/sdcard1/documents']) text = result.decode() data = text.split('\r\n') for r in data: print(r) -rwxrwx--- root sdcard_r 2029923 2016-06-25 22:31 BREAKING DAWN.pdf -rwxrwx--- root sdcard_r 1586880 2016-06-25 19:32 ECLIPSE.pdf -rwxrwx--- root sdcard_r 1384907 2016-06-25 20:32 NEW MOON.pdf drwxrwx--- root sdcard_r 2015-08-15 19:10 Sample Files -rwxrwx--- root sdcard_r 624276 2016-06-25 20:33 Stephenie Meyer - MIDNIGHT SUN (cap 1-12)_italiano.pdf -rwxrwx--- root sdcard_r 1282329 2016-06-25 20:33 Twilight.pdf result = sp.check_output(['adb', 'pull', '/storage/sdcard1/documents/ECLIPSE.pdf', '/home/ngiuseppe']) result b'/storage/sdcard1/documents/ECLIPSE.pdf: 1 file pulled, 0 skipped. 4.4 MB/s (1586880 bytes in 0.345s)\n'
ho voluto mostrare come son proceduto nella navigazione ed il risultato della copia da cellulare a computer, modalità analoghe dovrebbero funzionare per fare l'inverso.
Spero possa essere utile.
Ciao
Fatti non foste a viver come bruti...
-
- 2024-12-19 16:07:22
- Re: Chiarimento sull'uso del metodo "subprocess.Popen".
- Forum >> Programmazione Python >> Scripting
-
Come detto, il mondo Android mi è sconosciuto, cercando in merito ad "adb" ho scoperto che esiste anche per il mondo linux, scusa se inserisco un tip per eventuali linux-users interessati :
può essere installato dal Vostro gestore di pacchetti, in distro debian-based:
NzP:~$ sudo apt install adb
Si tratta dello Android-SDK di google.
Il comando "adb" che avrete disponibile è, essenzialmente, un server, capace di rilevare dispositivi in rete, udb/seriale, etc. il solito "man adb" per le numerose opzioni disponibili.
Se il dispositivo "collegato" non avrà abilitata tra le opzioni dello sviluppatore la modalità "debug USB" esso NON sarà disponibile anche se collegato.
Venendo a python, cercando di muovere i primi passi utilizzando la metodica proposta dallo O.P., utilizzando un vecchio "LG Bello II" molto vecchio, mi è riuscito di vedere il device in questo modo :
import subproces result = subprocess.check_output(['adb', 'devices']) result b'List of devices attached\n0123456789ABCDEF\tunauthorized\n\n' data = result.decode('utf-8') data 'List of devices attached\n0123456789ABCDEF\tunauthorized\n\n' device = data.split('\n')1.split('\t') print(f'device {device0} - stato {device1}') device 0123456789ABCDEF - stato unauthorized
mi è riuscito di avere gli stessi risultati tramite Popen, ma senza utilizzo della shell
adb_sh = subprocess.Popen(['adb', 'devices'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = adb_sh.communicate() out b'List of devices attached\n0123456789ABCDEF\tunauthorized\n\n'
dato che l'utilizzo della shell scatena una miriade di output, attivando, se ho capito bene, il server
adb_sh = subprocess.Popen(['adb', 'devices'], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = adb_sh.communicate() out b'Android Debug Bridge version 1.0.41\nVersion 34.0.4-debian\nInstalled as /usr/lib/android-sdk/platform-tools/adb\nRunning on Linux 6.8.0-50-generic...
rendendo ingestibile l'output.
Non ho ancora ben capito come funziona la shell con adb, l'impressione è che venga chiusa appena eseguito un comando, al momento non ho motivo di pensare che rimanga disponibile un PID, mi riservo di approfondire.
@FaMel 79, Tu sei riuscito a vedere i Tuoi devices? Se la risposta è "NO" prova a sostituire al mio "adb" il pathmane del Tuo eseguibile, oltre, naturalmente, a verificare le impostazioni del Tuo device.
per inviare i comandi si dovrebbe utilizzare "communicate" inviando i comandi come byte (stringa.encode()) e sopra vi è esempio di come recuperare lo standard output e lo standard error.
Al momento è quello che posso, spero Ti sia utile, ciao
Fatti non foste a viver come bruti...
-
- 2024-12-19 08:04:36
- Re: Chiarimento sull'uso del metodo "subprocess.Popen".
- Forum >> Programmazione Python >> Scripting
- FaMel 79 said @ 2024-12-18 17:15:21:sono un nuovo utente del forum alla ricerca di qualche consiglio... Avrei bisogno di qualche chiarimento su come utilizzare il metodo "subprocess.Popen" per gestire l'eseguibile "adb.exe" durante le operazioni di I/O su smartphone Android. Di seguito condivido lo script realizzato e l'output ottenuto.Scusa se intervengo solo per porre una domanda, non ho alcuna pratica di interfacciamento con sistemi android ma il quesito mi ha incuriosito.
Domanda : le operazioni di I/O che stai cercando di effettuare sono da un sistema operativo "altro" (tipo windows, linux, etc.) verso un dispositivo android collegato, ovvero direttamente in una applicazione funzionante in un dispositivo android?
Chiarendo tale "ambiguità" scaturiscono linee di ricerca diverse, con risultati, nel primo caso, anche direttamente collegati al quesito, tipo questo, od anche inerenti tools specifici, tipo questo, mentre nel secondo, a giudicare da questo, sembra una problematica tutt'altro che semplice.
Come detto, la Tua domanda mi ha incuriosito, "abd.exe" mi è sconosciuto (uso solo sistemi linux) ma se precisi cosa intendi fare e come si potrebbe cercare qualcosa di specifico al Tuo problema.
Ciao
Fatti non foste a viver come bruti...
-
- 2024-12-17 11:30:58
- Re: Individuare files dei fonts
- Forum >> Programmazione Python >> Files e Directory
- trescon said @ 2024-12-17 08:54:15:Ciao Nuzzopioppo, sempre una fonte di approfondimento. Per fortuna che tu sei quello che in una mailing LIST potrebbe essere di “impaccio” …… pensa a chi sta peggio di te che rompi che sarebbe.
Saluti ancora e grazie per tutte le info che ci dai
Oh ... mi fa piacere il Tuo apprezzare, grazie, ma in ogni caso approfondì la problematica, sviluppando tutta una serie di metodi per ricerca e visualizzazione, ma non la risolsi.
Se sei interessato il discorso può anche essere ripreso, comunque la "sensazione" è quella che si finisce in un far west, ove ognuno usa "regole proprie"
Fatti non foste a viver come bruti...
-
- 2024-12-16 07:44:38
- Re: Apertura menu laterale
- Forum >> Principianti
- hela ella said @ 2024-12-16 06:06:35:... Ti consiglio di esplorare anche l'uso di place per gestire la Among Us posizione del frame...beh ... fermo restando che vale comunque la pena di conoscere tutti i gestori di geometria disponibili, l'utilizzo di "place" implica il ricalcolo del posizionamento di ogni singolo widget contenuto in una finestra che lo adotta.
A mio parere, sfruttare le caratteristiche di "elasticità" dei gestori "pack" o "grid" semplifica parecchio la faccenda e riduce di molto il codice necessario (il che è sempre un'ottima cosa), un buon "disegno" preventivo dell'interfaccia e degli "effetti" che si vogliono ottenere sarebbe un buon approccio, poi scegliere il gestore secondo il criterio del minimo codice possibile : semplificherebbe la manutenzione del codice stesso e l'introduzione di bugs nella stesura imho
Ciao
Fatti non foste a viver come bruti...
-
- 2024-12-06 13:00:25
- Re: Messaggi privati nel forum?
- Forum >> Principianti
- non saprei risponderti, ma nel mio c'è il criptico messaggio allegato, quindi forse palmux sa come si faQuindi funziona ... Credo che il "come" lo si possa "decifrare", non che sia poi significativo la mia era solo curiosità, se sei curioso anche Tu potrei provare ad inviarTi un messaggio di prova, magari ci riesco
edit : vedo che sono stato preceduto, ok, funziona, ed ho capito l'indicazione che vedevo : totale dei messaggi scambiati
Curiosità soddisfatta, non ne abuserò, Grazie e ciao
--- Ultima modifica di nuzzopippo in data 2024-12-06 13:10:56 ---Fatti non foste a viver come bruti...
-
- 2024-12-06 11:54:39
- Messaggi privati nel forum?
- Forum >> Principianti
- Salve, non sapevo dove porre la domanda, provo qui.
Quando effettuo il login trovo una cartella non visibile in caso di navigazione anonima, essa è denominata "Messaggi privati" con sottotitolo "i tuoi messaggi privati", segna 9 "discussioni" ma accedendovi non ne risulta alcuna.
Me ne sono accorto di recente, di norma effettuo il login giusto per rispondere ad un post e mi disconnetto immediatamente.
Anche se suppongo che sia un abbozzo di qualcosa poi tralasciato mi ha incuriosito e potrebbe esserci qualcosa che non conosco, domande :
1 - Funziona la messaggistica inter-utente?
2 - se si, come?
Grazie dell'attenzioneFatti non foste a viver come bruti...