У меня есть окно Tkinter, которое имеет текстовое поле и подклассы ttk.TreeView
.Когда я запускаю программу, я ввожу текст в текстовое поле и переключаюсь на древовидную структуру.Когда я пытаюсь сделать это с помощью клавиши Tab
, кажется, что фокус переключается не на таблицу, а на полосу прокрутки, поэтому при нажатии клавиш вверх / вниз содержимое таблицы прокручивается, но не выбирается.Как переключиться на сам стол с помощью клавиши Tab
?
Рабочий пример:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.ttk as ttk
class TV(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.CreateUI()
self.LoadTable()
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'] = ('Col1', 'Col2', 'Col3')
tv.heading("#0", text='id')
tv.heading('Col1', text='Col1')
tv.heading('Col2', text='Col2')
tv.heading('Col3', text='Col3')
tv.grid(sticky = (tk.N,tk.S,tk.W,tk.E))
self.treeview = tv
self.treeview.bind('<1>',self.OnClick)
self.grid_rowconfigure(0, weight = 1)
self.grid_columnconfigure(0, weight = 1)
def LoadTable(self):
for i in range(100):
self.treeview.insert('', 'end', iid=str(i+1), text='1', values=(2, 3, 4))
def OnClick(self,event):
rowid=self.treeview.identify_row(event.y)
self.treeview.selection_set(rowid)
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')
ic_list=TV(root)
ic_list.grid(row=1,column=0,sticky='ns')
sc.config(command=ic_list.treeview.yview)
ic_list.treeview.selection_set('1')
filt.focus()
root.mainloop()