Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - nuzzopippo

Pagine: [1] 2 3 ... 40
1
...Quando clicco sulla prima listbox, potrei intercettare lcelemento premuto e modificarne la presenza nelle tuple per poi modificare direttamente le listbox.

Che ne dite?...

Anche se hai risolto, perché non dire nulla?

imho, dipende a cosa serve effettivamente alla Tua applicazione, mi spiego :
Le list-box mantengono in memoria l'elenco degli item (elementi) inseriti, in effetti funziona grosso modo come le liste da cui prendono il nome, puoi accere agli elementi vuoi per indice, vuoi per selezione. Personalmente se l'elemento di una list-box mi serve come dato di per se non esito di usare la list-box stessa come "area di memorizzazione" e profittare delle sue capacità di binding per svolgere azioni in base ai dati selezionati.
Per altro, uso frequentemente utilizzarle come riferimenti a dati più articolati ed indicizzati, di norma, appunto tuple o, più frequentemente liste, di oggetti dei quali espongo dati caratteristici, p.e. il base-name di una lista di files.

Qualora capiti di dover "passare" uno o più elementi da una list-box ad un'altra è possibilissimo farlo senza elenchi intermedi, basta leggere la selezione corrente della lista origine ed aggiungere il valore letto nella list-box di destinazione, in merito leggere i metodi currselection ed insert.

[P.S.] Qualora servisse un esempio di tali passaggi "diretti" fai sapere, ciao :)

2
Base / Re:Chiusura improvvisa di una finestra Python
« il: Gennaio 21, 2022, 15:03 »
Comunque, come detto, ho trovato questo post intrigante, tant'è che mi son messo a leggere la docs e fare qualche esperimento con la libreria, dalla linea python shell non ho avuto difficoltà da ritagliare spezzoni video o creare video mixando immagini e musica, però mi seccava terribilmente l'adozione di pygame e ipython scelta dall'autore della libreria e ho deciso  di sperimentarne l'uso con tkinter ... ho dovuto sbattermi parecchio per riuscire a "prendere" gli output di ffmpeg, ci son riuscito quando ho trovato, nella pagina github della libreria, una indicazione dell'autore circa proglog, ed altre ricerche, sub-classando la classe "ProgressBarLogger" e dando in pasto il risultato al metodo write_videofile del clip di moviepy.editor.concatenate.

Purtroppo, per quanto rudimentale la prima finestra di test realizzata arriva a 400 righe di codice, non è il caso di postarla ma, se @jacopo o altri sono interessati lo indichino qui che cercherò di sintetizzare e descrivere la tecnica utilizzata (ancora largamente "sperimentale") o, se proprio occorre, a rendere da qualche parte accessibile il codice completo.

Ciao :)

3
Base / Re:Chiusura improvvisa di una finestra Python
« il: Gennaio 18, 2022, 11:17 »
Trovo intrigante questo Tuo post, principalmente perché ogni tanto mi diverto con un "media-organizer" con capacità di esecuzione di files audio-video, singoli o in forma di playlist, tramite la libreria python-vlc, mi fai "prudere le mani". dalla voglia di integrarci "qualcosa" del genere.

Passiamo al Tuo problema, ho provato il codice, selezionando un file video ed un mp3 per cambiare l'audio ed alla selezione del comando "2" mi da un traceback chilometrico la cui le parti iniziale e finale sono :

chunk:   0%|          | 0/1 [00:00<?, ?it/s, now=None]Traceback (most recent call last):
  File "/home/nuzzopippo/src/posts/jacopo/video_editor.py", line 65, in <module>
    final_clip.write_videofile(final_video_path, codec='libx264', audio_codec="aac")
  File "<decorator-gen-55>", line 2, in write_videofile
. . .
  File "/home/nuzzopippo/pyvenvs/moviepy_v/lib/python3.8/site-packages/moviepy/audio/io/readers.py", line 171, in get_frame
    "Accessing time t=%.02f-%.02f seconds, "%(tt[0], tt[-1])+
IndexError: index 0 is out of bounds for axis 0 with size 0

Ovvio che non conoscendo la libreria movie.py bisogna un po' scoprire quale sia il problema, leggerò la docs, non scrivo per questo ma per un altro motivo.

La Tua applicazione è essenzialmente una applicazione testuale che si carica tkinter per sfruttarne le finestre di dialogo per files/directory : come mai questa strana scelta?
Personalmente, volessi sviluppare a "linea di comando" mediterei circa l'utilizzo degli strumenti di python (os essenzialmente) abbinandoli alle curses oppure creerei una applicazione grafica a finestre.

Detto questo, se Ti va, indica dei link ad oggetti audio-video da utilizzare per "esperimenti concordati" e proviamo assieme a sperimentare uno specifico risultato, vediamo che ne viene fuori.

Ciao

4
Tkinter / Re:Creazione di un programma in tkinter con più frame
« il: Gennaio 17, 2022, 16:12 »
Pace a Te

Riguardo le finestre multiple in tkinter, esse si realizzano utilizzando oggetti Toplevel, non due istanze a Tk, deve esistere una, e solo una, istanza a Tk, il suo metodo mainloop() crean un thread bloccante ed esclusivo, niente di esterno a tale thread può essere eseguito sino a quando il thread creato da mainloop non esce.
Per altro, vi sono varie cose nel Tuo codice che darebbero errore, tipo una StringVar quale metodo/proprietà di una listbox, StringVar è un oggetto (classe) di tkinter e la modalità di istanza sarebbe errata.

Detto questo, leggo dalla Tua presentazione che hai seguito un corso on-line per apprendere python e che la Tua esperienza ha un inizio recente, forse faresti bene ad approfondire un pochino prima di affrontare argomenti complessi come le interfacce grafiche, son davvero belle bestie e personalmente credo che la modalità imperativa/funzionale adottata nel Tuo script non sia la più idonea per l'argomento, anche se adottata in molti esempi spiccioli, non appena si inizia a far "qualcosa" con le interfacce grafiche è quasi un obbligo passare alla programmazione ad oggetti, quindi alle classi python, argomento che se non conosciuto Ti suggerirei di acquisire prima di provarci con applicazioni ad interfaccia utente grafica.

In ogni caso, qualora Tu voglia comunque provarci con tkinter, se non trovi da te qualcosa di soddisfacente e Ti occorra un qualche esempio di applicazione a finestre multiple (ovviamente fatto con utilizzo di classi) fai sapere, ogni tanto mi appunto qualcosa e posso fornirti un link a qualche mia prova.

5
Da Python 2.x a Python 3.x / Re:file.pyc
« il: Gennaio 17, 2022, 15:40 »
Se il programma lo hai creato Tu, puoi provare a crearti un eseguile con pyinstaller, il miglio modo di procedere sarebbe crearsi un venv dove ci piazzi le librerie che Ti servono e pyinstaller, attivi il venv e poi provi a compilarti il tuo programma agendo sul sorgente del modulo di avvio con l'opzione "--onefile" già detta in precedenza, pyinstaller creerà (o meglio cercherà di farlo) un unico file che comprende l'interprete python e le librerie da utilizzare, per eventuali problemi vedersi la documentazione.
È scontato che la cosa deve essere eseguita su di una macchina conforme al target di destinazione dell'eseguibile da realizzare.

Tieni presente che i sistemi windows recenti indicano un programma così fatto quale virus

6
Da Python 2.x a Python 3.x / Re:file.pyc
« il: Gennaio 15, 2022, 11:58 »
Ci installi python e lo esegui con il python installato ... se non ci sono problemi di versione o ambiente.

Leggi qua per farti idea di cosa stai parlando.

7
Benvenuto e regolamento / Re:Esportazione Tkiner
« il: Gennaio 14, 2022, 18:46 »
Usando pyinstaller il file non è .exe, ma .pyc

il file "*.pyc" è un byte-code python, non è un eseguibile e viene prodotto normalmente da python quando esegui un tuo script.

Strano ciò che dici, non ho molta esperienza di ambienti windows (uso solo linux) ma tempo fa con pyinstaller e l'opzione "--onefile" ho creato un eseguibile (.exe) windows  (windows XP) che viene eseguito senza alcun problema sulle macchine dei colleghi del tutto prive di python, ovviamente ho dovuto compilare su macchina virtuale windows XP.

Che io sappia, utilizzando l'opzione sopra detta (--onefile) viene incluso nell'eseguibile l'interprete python e le librerie necessarie (magari qualcuna bisogna specificarla) ... in che contesto hai compilato il Tuo script? Hai preso il Tuo "eseguibile" dalla cartella "build" che viene creata, forse?, se è così guarda che lo eseguibile "dovrebbe" essere nella directory "dist"

8
Benvenuto e regolamento / Re:Pace a tutti voi, mi presento
« il: Gennaio 14, 2022, 18:31 »
Ciao @MrVortex, ben venuto, qui si è un po' tutti per imparare ... e anche per condividere quel poco che si sa, impareremo assieme

... raro, sentir parlare di dio, sei "particolare", il che è un'ottima cosa :)

9
Tkinter / Re:larghezza frame e scrollbar
« il: Gennaio 13, 2022, 21:37 »
Grazie, Quindi non si può costruire un Frame con scollbar che sia più corto di 400? neanche trovando un alternativa alla canvas?
Certo che si può, ed utilizzando i canvas, pure! Se guardi la documentazione che Ti ho lincato vedrai che il canvas ha le proprietà "width" ed "height" che puoi utilizzare per impostarlo direttamente, inoltre i controlli si adatteranno alle dimensioni definite per la finestra, però stabiliranno anche delle "dimensioni minime" coerenti con il contesto impostato, al di sotto delle quali (sommate ovviamente) cominceranno a non essere visualizzati perché lo spazio della finestra è insufficiente.

Il fatto che io normalmente non forzi il dimensionamento dei vari widget non significa che non lo faccia se mi è opportuno ma, in genere, il dimensionamento di default è ragionevolmente accettabile per le varie tipologie di controlli ed equilibrato per il sistema in uso, pertanto se non ho necessità particolari trovo logico accettare i dimensionamenti standard ed adeguare le dimensioni minime della finestra in modo che la stessa non possa essere ridotta in maniera tale da coprire i controlli. È semplice e mi evita una caterva di elementi da considerare facendo altrimenti.
Leggi la docs e fai qualche prova per conto Tuo, poi fai conoscere il Tuo pensiero.

Si possono usare 2 laout manager diversi(come ad esempio.grid e .place) in 2 frame diversi?
Certo che si, si possono usare anche tutti e tre i layout-manager disponibili (place-pack-grid) contemporaneamente ... a patto di sapere cosa si fa.
Funzionano in maniera differente tra loro e può essere complicato equilibrarli se non si è ben capito come funzionano, ed anche avendoli studiati approfonditamente a volte possono capitare visualizzazioni inaspettate, semplicemente perché non si è ben considerato un qualche fattore ... ancora una volta è una questione di quante "energie" si vogliano dedicare ad una particolare impostazione, personalmente trovo opportune le soluzioni quanto più lineari e dirette possibili, applicare una singola logica, invece di due (o tre), confonde meno le idee e rende più semplice leggere (e mantenere) il codice dopo un po' di tempo ... poi, è una questione di gusti personali, c'è chi ama l'avventura ;)

10
Tkinter / Re:larghezza frame e scrollbar
« il: Gennaio 13, 2022, 15:34 »
Riguardo alla "rotellina", dipende dal sistema operativo che utilizzi, bisogna fare il binding del mouse, sotto windows si intercetta l'evento "<MouseWheel>" che nel caso di Linux (il mio s.o.) non esiste e si intercettano gli eventi "<Button-4>" (scroll su) e "<Button-5>" (scroll giù) ... riguardo al Tuo problema presente "comunque" è dato dalle dimensione degli elementi non fissate e di default, ovviamente il canvas NON diminuisce la sua dimensione minima all'eccessivo ridursi della finestra, superata una certa soglia la riduzione porta la non visibilità di ciò che eccede la finestra attiva.
Nelle mie applicazioni uso non definire una dimensione per la finestra ma, dopo aver istanziato tutti i controlli necessari alle loro dimensioni di default aggiornare la finestra e fissare le dimensioni che assume quale minime.

Ti esemplifico il Tuo codice intercettando e gestendo la rotella del mouse con la scrollbar e fissando le dimensioni minime della finestra dopo la sua definizione (quando inserisci il codice utilizza in pulsante "pythoncode" dell'editor dei post
import tkinter as tk
from tkinter import ttk


class ScrollableFrame(ttk.Frame):
    def __init__(self, container, *args, **kwargs):
        super().__init__(container, *args, **kwargs)
        self.canvas = tk.Canvas(self)
        scrollbar = ttk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
        self.scrollable_frame = ttk.Frame(self.canvas)

        self.scrollable_frame.bind(
            "<Configure>",
            lambda e: self.canvas.configure(
                scrollregion=self.canvas.bbox("all")
            )
        )

        self.canvas.create_window((0, 0), window=self.scrollable_frame, anchor="nw")

        self.canvas.configure(yscrollcommand=scrollbar.set)

        self.canvas.pack(side="left", fill="both", expand=True)
        scrollbar.pack(side="right", fill="y")
        # per Windows
        #scrollbar.bind('<MouseWheel>', self._on_mousewheel)
        # per linux
        scrollbar.bind('<Button-4>', self._on_mousewheel)
        scrollbar.bind('<Button-5>', self._on_mousewheel)

    def _on_mousewheel(self, evt):
        #self.canvas.yview_scroll(-(evt.delta/120), 'units')
        move = 0
        if evt.num == 5 or evt.delta == -120:
            move = -1
        elif evt.num == 4 or evt.delta == 120:
            move = 1
        else:
            return
        self.canvas.yview_scroll(move, 'units')


root = tk.Tk()
#root.geometry("400x300")
 
frame1 = ScrollableFrame(root)
frame1.pack(fill='both', expand=True)

for i in range(100):
    tk.Button(frame1.scrollable_frame, text=f"Button {i}").grid(row=i, column=0, padx=10, pady=10)

root.update()
l = root.winfo_reqwidth()
h = root.winfo_reqheight()
root.minsize(l, h)

root.mainloop()


Riguardo al libro su tkinter, mi dispiace, non ne conosco, io ho imparato ciò che a me è servito da questa documentazione ed una enormità di prove e ricerche in internet (San Google fa miracoli) ... certo, avevo una esperienza pregressa sulle interfacce grafiche ed avevo idea di cosa cercare.

11
Tkinter / Re:larghezza frame e scrollbar
« il: Gennaio 13, 2022, 09:44 »
La scrollbar scompare perché frame1 NON viene ridimensionato assieme alla finestra, rimane delle dimensioni iniziali in sostanza, e quindi la posizione della scrollbar cade all'estero della finestra e "sparisce", prova a variarne il pack in questo modo
frame1.pack(fill='both', expand=True)

il problema si risolverà

12
Progetti e script / Re:programma per bilancio personale
« il: Gennaio 10, 2022, 17:28 »
salve ho un problema con una piccola applicazione che sto provando a realizzare, (ho scoperto python da poco)...
... avevo pensato ad un file excel, ma non riesco a capire come fare.

Se hai iniziato da poco, forse faresti meglio ad acquisire una certa padronanza del funzionamento di python prima di avventurarti a realizzare applicazione, coumnque, per excel prova a guardare qui.

Se guardi nei post troverai che ogni tanto si trattano aspetti di quella librerie, magari Ti possono servire come spunto.

13
Progetti e script / Re:Allarme con email
« il: Gennaio 10, 2022, 10:11 »
Sinceramente non so di cosa tu stia parlando...

Ti sta dicendo che il Tuo errore è dato dal tipo di codifica utilizzato per rappresentare il testo da Te letto, che può variare, ed è variato, in molteplici formati caratteristici dei vari sistemi operativi ad anche sugli stessi "tipi" di sistema operativo nel corso del tempo.
Ovviamente, chi stende programmi "dovrebbe" essere consapevole del problema (esiste sin dagli albori dei computer) ad avere almeno idea di cosa tratterà in suo programma.

A parte le funzioni indicate da @GlennHK Ti inviterei a farti una idea in merito alle codifiche di testo leggendo questo punto della documentazione del modulo "codecs" (oltre il resto) ... Ti renderai conto che è un argomento "complicatuccio" e solo Tu "potresti" aver presente "cosa" stai trattando (anche se ritengo che l'indicazione di @RicPol sia quella giusta) e provvedervi in conseguenza.

14
Base / Re:calcolatore x eq. di secondo grado
« il: Gennaio 08, 2022, 15:44 »
Hummm ... ignoro le domande rivolte a @RicPol, anche se dal codice vedo che hai "digerito poco", risponderà lui se riterrà, passo direttamente alle Tue domande su Linux.

In primo luogo, ignoro la faccenda delle directory, è un "qualcosa" di relativo a ciò che serve caso per caso, consideriamo il Tuo sript di esempio:
P:~$ nano script.sh
NzP:~$ cat script.sh
#!/bin/sh

echo Quanti anni hai?
read anni
if [ $anni -ge 18 ]
then
echo sei maggiorenne
else
echo sei minorenne
fi

La Tua modalità di avvio dello script è invocare la Korn-shell per eseguirlo, discorso validissimo
NzP:~$ sh script.sh
Quanti anni hai?
62
sei maggiorenne
NzP:~$ sh script.sh
Quanti anni hai?
12
sei minorenne

MA c'è un particolare : hai inserito la shebang!
Questo particolare accorgimento Ti permetterebbe di eseguire lo script invocando automaticamente l'interprete dei comandi voluto, basta renderlo eseguibile, vedi sotto
NzP:~$ chmod +x script.sh
NzP:~$ ./script.sh
Quanti anni hai?
54
sei maggiorenne

che poi è il metodo di norma usato per lanciare gli script in linux, piuttosto comodo nel caso uno script invochi altri script.

Tale metodologia, nel mondo linux, è applicabile anche agli script python, si può invocare direttamente l'interprete dei comandi oppure inserirlo tramite la shebang e rendendo lo script eseguibile, esempio
NzP:~$ nano script.py
NzP:~$ cat script.py
#!/usr/bin/env python3

anni = int(input('Quanti anni hai? : '))
if anni >= 18:
print('Sei maggiorenne')
else:
print('Sei minorenne')
NzP:~$ chmod +x script.py
NzP:~$ ./script.py
Quanti anni hai? : 18
Sei maggiorenne
NzP:~$

Come puoi constatare, utilizzare la shebang ed i permessi di scrittura rende lo script quasi un programma autonomo (apparentemente).
Noterai, senz'altro, la particolare forma della shebang : "#!/usr/bin/env python3"
Tale particolare notazione è data per generalizzare l'invocazione di python, versione 3, che può essere difforme tra le varie distribuzioni linux, e quindi non univocamente raggiungibile, ci si affida quindi alle impostazioni di ambiente (environment) per raggiungere l'eseguibile python voluto.

Ovviamente, nel caso Tu volessi avviare la versione di un particolare ambiente python, diciamo un Tuo venv python, dovresti indicare il path assoluto del relativo eseguibile python nella shebang.

Spero Ti sia sufficiente :)

P.S. - in genere, nei miei script uso la shell bash, ma non cambia molto ;)

15
Web framework / Re:OSError: [Errno 48] Address already in use
« il: Gennaio 08, 2022, 12:35 »
Il fatto è che sto imparando ad usare Flask e non so ancora come fare da codice il controllo che mi hai suggerito. ...

hai provato con "nomeapp.run(debug=True)", se ho compreso bene dovrebbe re-inizializzare il server, oltre che attivare il debuger ed impostare il tutto in "development mode", in modo da non inteferire con eventuali ambienti di produzione, magari tale modalità potrebbe andarti bene, vedi in fondo alla pagine che hai messo in link nel Tuo precedente post.

Pagine: [1] 2 3 ... 40