es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Seleccione una fila en el treeview usando el teclado Ctrl+Enter.

Estoy trabajando en un problema relacionado con la selección de una fila después de otra. Modifico el código anterior y recibo la selección total del treeview cuando presiono Ctrl+Enter. ¿Qué debo hacer para agregar una fila presionando Ctrl+Enter y cuando presiono Ctrl+Enter una vez más agrego una segunda fila?

import tkinter como tk
import tkinter.ttk como ttk

clase App(tk.Frame):

def __init__(self, parent):
    tk.Frame.__init__(self, parent)
    self.CreateUI()
    self.grid(sticky=(tk.N, tk.S, tk.W, tk.E))
    parent.grid_rowconfigure(0, weight=1)
    parent.grid_columnconfigure(0, weight=1)

def CreateUI(self):
    tv = ttk.Treeview(self, yscrollcommand=sc.set, height=30)
    tv['columns'] = ('Name',)
    tv.heading("#0", text='Items')
    tv.column("#0", anchor="w", width=75)
    tv.heading('Name', text='Name')
    tv.column('Name', anchor='w', width=150)
    tv.grid(sticky=(tk.N, tk.S, tk.W, tk.E))
    self.treeview = tv
    self.treeview.bind('<return>', self.OnClick)

def OnClick(self, event):
    rows = self.treeview.get_children()
    for row in rows:
        self.treeview.selection_add(row)

items = []
for i in range(100):
items.append([i, ‘Item %d’ % i])

root = tk.Tk()
sv = tk.StringVar()
filt = tk.Entry(root, textvariable=sv)
filt.grid(row=0, column=0, sticky=’nw’)
sc = tk.Scrollbar(root)
sc.grid(row=1, column=1, sticky=’ns’)
item_list = App(root)
item_list.grid(row=1, column=0, sticky=’ns’)
sc.config(command=item_list.treeview.yview)
for i in range(len(items)):
item_list.treeview.insert(”, ‘end’, iid=str(i), text=items[i][0], values=(items[i][1],))
item_list.treeview.selection_set(‘0’)

def update_filter(args):
global items, item_list, sv
filtr = sv.get().lower()
item_list.treeview.delete(
(item_list.treeview).get_children())
for i in range(len(items)):
if filtr in str(items[i][0]).lower() or filtr in str(items[i][1]).lower():
item_list.treeview.insert(”, ‘end’, iid=str(i), text=items[i][0], values=(items[i][1],))
item_list.treeview.update()
item_list.update()

sv.trace(‘w’, update_filter)
filt.focus()
root.mainloop()

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para añadir una fila presionando Ctrl+Enter y al presionar de nuevo Ctrl+Enter para añadir una segunda fila, puedes usar el método selection_toggle del widget Treeview. Este método cambiará la selección del elemento en el índice dado.

    Puedes modificar tu método OnClick para usar selection_toggle de esta forma:

    def OnClick(self, evento):
        filas = self.treeview.get_children()
        for fila in filas:
            self.treeview.selection_toggle(fila)
    

Comments are closed.