pythontkintertreeviewshift-Up绑定是输入之后的一个迭代

pythontkintertreeviewshift-Up绑定是输入之后的一个迭代,python,tkinter,treeview,Python,Tkinter,Treeview,我还希望能够使用键来选择树视图中的项目。没有给出任何错误,但选择延迟了一个元素。在我的代码中,我希望选择与焦点相同,但选择最终位于列表中的元素上 我猜Arrow Up键的默认绑定是在绑定之后运行的 我已经搜索了一个虚拟事件来替换我绑定中的,它的功能与类似,而不是,但是运气不好 当按下时,您知道如何同步选择和焦点吗 注意:树的selectmode设置为none,因为在我的主应用程序中,我需要执行与默认值稍有不同的选择 import tkinter as tk from tkinter import

我还希望能够使用
键来选择树视图中的项目。没有给出任何错误,但选择延迟了一个元素。在我的代码中,我希望选择与焦点相同,但选择最终位于列表中的元素上

我猜Arrow Up键的默认绑定是在绑定之后运行的

我已经搜索了一个虚拟事件来替换我绑定中的
,它的功能与
类似,而不是
,但是运气不好

当按下
时,您知道如何同步选择和焦点吗

注意:树的selectmode设置为none,因为在我的主应用程序中,我需要执行与默认值稍有不同的选择

import tkinter as tk
from tkinter import ttk
class Treeview_Select:
    def __init__(self, tree):
        tree.bind('<Shift-Up>', self.ShiftUp, add='+')
    def ShiftUp(self, event):
        if event.widget.index(event.widget.focus()) is not '':
            print(event.widget.index(event.widget.focus()))
            event.widget.selection_set(event.widget.focus())
app = tk.Tk()
tree = ttk.Treeview(app)
v_scrollbar = ttk.Scrollbar(app, orient='vertical', command=tree.yview)
tree.config(selectmode='none', yscrollcommand=v_scrollbar.set)
tree.grid(row=0, column=0, sticky='nesw')
v_scrollbar.grid(row=0, column=1, sticky='nes')
Treeview_Select(tree)
for i in range(14):
    tree.insert("", 'end', text=i)
app.mainloop()
将tkinter作为tk导入
从tkinter导入ttk
类树视图\u选择:
定义初始化(自,树):
bind(“”,self.ShiftUp,add='+'))
def移位(自身、事件):
如果event.widget.index(event.widget.focus())不是“”:
打印(event.widget.index(event.widget.focus()))
event.widget.selection\u集(event.widget.focus())
app=tk.tk()
tree=ttk.Treeview(应用程序)
v_scrollbar=ttk.scrollbar(应用程序,orient='vertical',command=tree.yview)
tree.config(selectmode='none',yscrollcommand=v_scrollbar.set)
tree.grid(行=0,列=0,sticky='nesw')
v_scrollbar.grid(行=0,列=1,sticky='nes')
Treeview_选择(树)
对于范围(14)内的i:
tree.insert(“,”end',text=i)
app.mainloop()

对于此类操作,您应该使用
tree.prev(item)
。如果要实现
,请使用
树。下一步(项)

“只有一个元素的选择延迟”:不,您的
。选择集(…
要提前。请阅读此相关答案
def ShiftUp(self, event):
    if event.widget.index(event.widget.focus()) is not '':
        previous = event.widget.prev(event.widget.focus()) #use current focus to get previous one
        event.widget.selection_set(previous)
        event.widget.see(previous) #make sure the new selection is shown