Python e comando entry
-
- Prode Principiante
- Messaggi: 35
- Iscrizione: sabato 6 maggio 2017, 2:06
- Desktop: ubuntustudio
- Distribuzione: Ubuntu 17.04 - x86_64
- Sesso: Maschile
- Località: Napoli
Python e comando entry
Salve,
sono alla ricerca di esempi in python di un form / frame / finestra, con colonna di entry in cui ci si sposta col tasto enter, tab e frecce, fin ora non sono riuscito a trovare nulla del genere, Spero mi possiate indicare qualcosa che mi possa aiutare nella realizzazione di questo tipo di progetto.
Grazie in anticipo.
sono alla ricerca di esempi in python di un form / frame / finestra, con colonna di entry in cui ci si sposta col tasto enter, tab e frecce, fin ora non sono riuscito a trovare nulla del genere, Spero mi possiate indicare qualcosa che mi possa aiutare nella realizzazione di questo tipo di progetto.
Grazie in anticipo.
-
- Prode Principiante
- Messaggi: 4
- Iscrizione: martedì 9 maggio 2017, 20:58
- Sesso: Maschile
Re: Python e comando entry
Ciao ti conviene cercare dei programmi fatti con il modulo tkinter su internet, ne trovi parecchi e ti sposti con il tasto tabulazione
ciao!
ciao!
- Claudio_F
- Entusiasta Emergente
- Messaggi: 1463
- Iscrizione: lunedì 28 maggio 2012, 18:49
- Desktop: Mate/Gnome
- Distribuzione: Ubu22.04
Re: Python e comando entry
In tk Il TAB è automatico, frecce e invii vanno gestiti manualmente tramite apposite callback. Ad esempio:
Codice: Seleziona tutto
import Tkinter as tk
#------------------------------------------------------
def on_down(evt):
i = evt.widget.fr_index
if i < len(elist) - 1: elist[i+1].focus_force()
else: elist[0].focus_force()
#------------------------------------------------------
def on_up(evt):
i = evt.widget.fr_index
if i > 0: elist[i-1].focus_force()
else: elist[-1].focus_force()
#------------------------------------------------------
root = tk.Tk()
fr = tk.Frame(root)
fr.pack(padx=0, pady=2)
elist = [tk.Entry(fr, width=20) for _ in range(10)]
for n, e in enumerate(elist):
e.fr_index = n # <--- monkey patch
e.bind('<Return>', on_down)
e.bind('<Down>', on_down)
e.bind('<Up>', on_up)
e.pack(padx=4, pady=2)
elist[0].focus_force()
root.mainloop()
Re: Python e comando entry
E' un esempio molto bello perchè è anche molto semplice.
Chiedo scusa se mi intrometto.
Dovrei proprio fare una cosa del genere ma dovrei poter precaricare (con 2 input) sia delle diciture da anteporre (e non modificabili) davanti ogni riga
e precaricare già dei valori.
Naturalmente vorrei in output solo i valori (di partenza o modificati)
Come dovrei fare?
Grazie ... e scusate l'intromissione.
Chiedo scusa se mi intrometto.
Dovrei proprio fare una cosa del genere ma dovrei poter precaricare (con 2 input) sia delle diciture da anteporre (e non modificabili) davanti ogni riga
e precaricare già dei valori.
Naturalmente vorrei in output solo i valori (di partenza o modificati)
Come dovrei fare?
Grazie ... e scusate l'intromissione.
- Claudio_F
- Entusiasta Emergente
- Messaggi: 1463
- Iscrizione: lunedì 28 maggio 2012, 18:49
- Desktop: Mate/Gnome
- Distribuzione: Ubu22.04
Re: Python e comando entry
Qualcosa del genere?
Codice: Seleziona tutto
import Tkinter as tk
#------------------------------------------------------
def on_down(evt):
i = evt.widget.fr_index
if i < len(elist) - 1:
elist[i+1].focus_force()
elist[i+1].selection_range('0', 'end')
else:
elist[0].focus_force()
elist[0].selection_range('0', 'end')
#------------------------------------------------------
def on_up(evt):
i = evt.widget.fr_index
if i > 0:
elist[i-1].focus_force();
elist[i-1].selection_range('0', 'end')
else:
elist[-1].focus_force();
elist[-1].selection_range('0', 'end')
#------------------------------------------------------
dati = (
('NomeCampo1:', 'ValoreIniziale1'),
('NomeCampo2:', 'ValoreIniziale2'),
('NomeCampo3:', 'ValoreIniziale3'),
('NomeCampo4:', 'ValoreIniziale4'),
('NomeCampo5:', 'ValoreIniziale5'),
)
root = tk.Tk()
fr = tk.Frame(root)
fr.pack(pady=2, padx=2)
elist = []
for n, d in enumerate(dati):
fri = tk.Frame(fr)
fri.pack()
lb = tk.Label(fri, text=d[0], anchor='w')
lb.pack(side='left')
e = tk.Entry(fri, width=20)
e.insert('0', d[1])
e.fr_index = n # <--- monkey patch
e.bind('<Return>', on_down)
e.bind('<Down>', on_down)
e.bind('<Up>', on_up)
e.pack(side='left')
elist.append(e)
elist[0].focus_force()
elist[0].selection_range('0', 'end')
root.mainloop()
Re: Python e comando entry
Si, Cosi!
ma come estraggo il risultato (solo dati) se fatte modifiche?
ma come estraggo il risultato (solo dati) se fatte modifiche?
- Claudio_F
- Entusiasta Emergente
- Messaggi: 1463
- Iscrizione: lunedì 28 maggio 2012, 18:49
- Desktop: Mate/Gnome
- Distribuzione: Ubu22.04
Re: Python e comando entry
Le entry sono contenute nella lista 'elist', quindi per ciascuna basta chiamare il metodo .get
Re: Python e comando entry
avevo già provato con
....
root.mainloop()
for x in elist:
print x.get()
ma non è cosi.... perchè?
....
root.mainloop()
for x in elist:
print x.get()
ma non è cosi.... perchè?
Re: Python e comando entry
Naturalmente funziona se faccio:
def esci(x):
w=[]
for x in elist:
print x.get();
root.destroy()
dopo aver inserito bind button
Oppure veramente si può avere il risultato senza aggiungere una funzione per l'uscita? ( ad esempio gestendo solo l'uscita con 'X')
altra cosa che non riesco a fare (per prevedere un tasto ripristina riga)
def ripr(evt):
i = evt.widget.fr_index; print 666
e.delete(0, END)
e.insert(0, "xxxxxxx")
come faccio a variare la riga i anzichè l'ultima?
def esci(x):
w=[]
for x in elist:
print x.get();
root.destroy()
dopo aver inserito bind button
Oppure veramente si può avere il risultato senza aggiungere una funzione per l'uscita? ( ad esempio gestendo solo l'uscita con 'X')
altra cosa che non riesco a fare (per prevedere un tasto ripristina riga)
def ripr(evt):
i = evt.widget.fr_index; print 666
e.delete(0, END)
e.insert(0, "xxxxxxx")
come faccio a variare la riga i anzichè l'ultima?
- Claudio_F
- Entusiasta Emergente
- Messaggi: 1463
- Iscrizione: lunedì 28 maggio 2012, 18:49
- Desktop: Mate/Gnome
- Distribuzione: Ubu22.04
Re: Python e comando entry
Con questo si può chiamare la funzione anche cliccando sulla X:maresama ha scritto:Oppure veramente si può avere il risultato senza aggiungere una funzione per l'uscita? ( ad esempio gestendo solo l'uscita con 'X')
Codice: Seleziona tutto
root.protocol('WM_DELETE_WINDOW', esci)
root.mainloop()
'e' identifica l'ultima Entry creata, in quella funzione la Entry corretta è identificata da evt.widgetaltra cosa che non riesco a fare (per prevedere un tasto ripristina riga)come faccio a variare la riga i anzichè l'ultima?Codice: Seleziona tutto
def ripr(evt): i = evt.widget.fr_index; print 666 e.delete(0, END) e.insert(0, "xxxxxxx")
Perché la distruzione della finestra distrugge tutti gli elementi che la compongono e i loro valori, un'alternativa è usare quit al posto di destroy, in tal caso il mainloop si ferma ma tutti gli elementi sono ancora presenti in memoria, infatti il mainloop può essere riavviato e la finestra ricompare come prima:avevo già provato conma non è cosi.... perchè?Codice: Seleziona tutto
root.mainloop() for x in elist: print x.get()
Codice: Seleziona tutto
def fine(evt=None):
print 'bye bye'
root.quit()
.....
root.protocol("WM_DELETE_WINDOW", fine)
root.mainloop()
for x in elist:
print x.get()
root.mainloop()
Re: Python e comando entry
Come sempre non ti limiti a risolvere il problema, ma spieghi anche dove sbagliamo e come si deve fare...
Sei un grande!
Ho fatto come hai suggerito e va tutto bene
Sia il ripristino della riga
Sia l'uscita con x (usando root.protocol("WM_DELETE_WINDOW", )
Grazie.
Ciao...
Sei un grande!
Ho fatto come hai suggerito e va tutto bene
Sia il ripristino della riga
Sia l'uscita con x (usando root.protocol("WM_DELETE_WINDOW", )
Grazie.
Ciao...
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 12 ospiti