Forum >> Principianti >> ConboBox

Pagina: 1

Buongiorno, Sono un autodidatta e dal 2018 ho cominciato a programmare (non ad oggetti) in Python. Provengo da Clipper(dos),VisualBasic,Javascript. Vorrei risolvere, se possibile questo mio quesito:
Ho un Combobox sul quale ho caricato un cursore di un a Tabella (esempio, vedo tutti i nomi). I dati in esso contenuti, li vedo, se selezionati, su di una maschera attraverso un def lookup. Tutto funziona egregiamente, ma... Se con il tempo la lista dei nomi si fa lunghissima, risulta scomodo andare a cercare un determinato nome scorrendo su e giù per il combo. Esiste una procedura per cui, digitando lettera dopo lettera sul combo stesso, si crea in filtro che mi riduca la sfilza di nomi? Spero di essermi spiegato chiaramente.

Sinceramente, ancora, mi manca un po' di proprietà di linguaggio, ma data l'età(80) mi perdonerete. Rimango in attesa Vs gradita risposta


--- Ultima modifica di Jakopo in data 2023-10-06 10:41:39 ---
ma... Se con il tempo la lista dei nomi si fa lunghissima, risulta scomodo andare a cercare un determinato nome scorrendo su e giù per il combo. Esiste una procedura per cui, digitando lettera dopo lettera sul combo stesso, si crea in filtro che mi riduca la sfilza di nomi? Spero di essermi spiegato chiaramente.
Non un filtro (che comunque sarebbe facile realizzare agendo sulla proprietà "value" del combo-box) ma un "posizionamento" lo ho implementato per un analogo problema, in sostanza un combo-box "interattivo", se può interessare ho messo on-line un appunto in merito (son vecchietto anch'io e tendo a dimenticare), guarda un po' se può interessarTi

Purtroppo si tratta di una classe, la OOP è quasi una necessità per affrontare un framework grafico, comunque credo sia semplice da capire, ho cercato di spiegarne il funzionamento e di fornire un piccolo esempio.

Se ritieni, fai sapere se Ti è utile e che ne pensi.


Ciao




P.S. - dimenticavo, ovviamente per funzionare correttamente la lista dei dati costituenti il "value" del combo-box deve essere ordinata, cosa che varrebbe anche per un eventuale "filtro" da applicarsi




--- Ultima modifica di nuzzopippo in data 2023-10-06 11:32:06 ---
Fatti non foste a viver come bruti...
Grazie per la risposta. io non programmo ad Oggetti, purtroppo. Comunque l'applicazione non funziona perchè mi dice che non trova from il modulo mytktools e non lo trovo neppute in Pip

Grazie comunque. Sarebbe stato proprio quello che cercavo. Grazie Sandro G.



Grazie per la risposta. io non programmo ad Oggetti, purtroppo. Comunque l'applicazione non funziona perchè mi dice che non trova from il modulo mytktools e non lo trovo neppute in Pip

Grazie comunque. Sarebbe stato proprio quello che cercavo. Grazie Sandro G.

Beh, Sandro, il modulo "mytktools" dovevi crearlo Tu copiandoti il codice di "InteractiveComboBox" ed inserendolo in un file con quel nome ed estensione ".py" nella stessa direttrice della Tua applicazione, lo avevo scritto, credo chiaramente, sotto il relativo blocco di codice

Se si ritiene di voler fare una prova con la finestra di test che
proporrò a fine post, copiate il codice, stando attenti alla
indentazione dello stesso (l'editor dei post potrebbe creare degli
artefatti) e salvatelo in un file denominato "mytktools.py" nella stessa
directory del file-applicazione.



Ti suggerirei, se non hai pratica dell'uso dei moduli, di provare a copiarti il codice della classe InteractiveComcoBox ed inserirlo all'inizio del Tuo codice (e gli import, naturalmente), poi precedere ad istanziare tale classe invece del ttk.Combobox (analogamente a come istanzi il combobox) e poi procedere normalmente, credo che dovremme funzionare a patto sia utilizzata una versione di python >= 3.10.

Così facendo dovresti avere disponibile per i Tuoi script la possibilità da Te cercata.





Riguardo alla OOP, comprendo che sia concettualmente un po' ostica, comunque, vale la pena di acquisine qualche concetto circa le classi, sono uno strumento potente, la mia classe non è altro che un sub-classamento della classe ttk.Combobox, della quale sfrutta proprietà e metodi tramite la "ereditarietà" e ne modifica alcune caratteristiche per "polimorfismo" ... concetti molto utili se acquisiti.




Se hai difficoltà, fai sapere, magari inserisci un piccolo esempio che vorresti implementare che cerchiamo di adattare le cose assieme.




Ciao

Fatti non foste a viver come bruti...
Grazie, Ho Capito. E' quanto cercavo. Ho inserito i due file in una cartella ed uno l'ho nominato mytktools.py.
Ora dovrò adattarlo alla mia applicazione. Ma dubito che ci riuscirò. Comunque Grazie ancora. Sandro G
Tutto ciò che dovresti fare è importaTi la classe nel Tuo script ed utilizzarla come, ed al posto, un comune ttk.Combobox : la classe dovrebbe comportarsi normalmente ed in più posizionarsi sul primo dato coerente con quanto da Te digitato nella cella di immissione o scartare il carattere digitato se non trova riscontro.

Provaci, in caso di problemi (nei test non ne ho trovati) fai sapere.




Per altro, se Ti occorre intercettare (od anche ridurre) caratteri non previsti, intervieni sulla proprietà di classe "key_accepted" aggiornando la stringa come Ti serve.




Ciao

Fatti non foste a viver come bruti...
Grazie, Ho Capito. E' quanto cercavo. Ho inserito i due file in una cartella ed uno l'ho nominato mytktools.py.
Ora dovrò adattarlo alla mia applicazione. Ma dubito che ci riuscirò. Comunque Grazie ancora. Sandro G

Chiedo venia, ma perchè mi da errore?


UPDATE TabPass SET User = n.x. WHERE Id in(4,5,100,137);


sqlite3.OperationalError: near "WHERE": syntax error


errore dovuto a n.x. o Id oppure Update non accetta in( mentre Select si



--- Ultima modifica di Jakopo in data 2023-10-17 21:29:10 ---
La domanda NON è pertinente all'argomento del post, dovresti aprirne una specifica nella sezione "database" del Forum.
Comunque:
Il messaggio è chiaro, vi è un errore di sintassi nella istruzione sql.

Cosa possa dare origine all'errore è un tirare ad indovinare, non conoscendo tanto la struttura delle tavole costituenti il database quanto il codice con cui si procede allo aggiornamento dati.

Da quanto leggo, l'intera query "dovrebbe" essere stata scritta manualmente (cosa che di norma si evita di fare), supposto sia così mi sembra di intuire che il dato "User" sia un dato di tipo testo ... nel caso fossi nel giusto, prova a modificare la query in questo modo:

"UPDATE TabPass SET User = 'n.x.' WHERE Id IN (4,5,100,137)"
ciò perché, se scritti "manualmente" i dati dei campi testo devono essere contenuti tra apici.

Qualora il dato n.x. fosse contenuto tra apici e ci sia stata una alterazione da parte dell'editor dei post nulla può dirsi riguardo al problema, mancando dati sulla struttura tavole, codice che genera l'errore e contesto in cui avviene.
Ciao
Edit: corretti artefatti inseriti dall'editor del post.


--- Ultima modifica di nuzzopippo in data 2023-10-17 23:38:45 ---
Fatti non foste a viver come bruti...
Giusto, l'errore era dovuto al fatto che mancavano le virgolette sul dato n.x. 'n.x.' Gazie e mi scuso della poca familiarità com questo Forum.


Pagina: 1



Esegui il login per scrivere una risposta.