Ttk Treeview:跟踪键盘选择

2024-05-08

这是一个带有 ttk 树视图的 Tk 小部件。当用户单击该行时,会执行某些功能(此处仅打印项目文本)。我需要的是以下内容:

  1. 最初的重点是文本输入。当用户按下 Tab 键时,焦点应该转到第一行,并且应该执行绑定到 Click 事件的函数。
  2. 当用户使用键盘在树视图中上下移动时,一旦选择了下一个单元格,也应该执行此函数。

我找不到与这些问题相关的任何内容。 ttk Treeview 是否能够跟踪键盘?谢谢。

import tkinter as tk
import tkinter.ttk as ttk

class 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('<1>',self.OnClick)

    def OnClick(self,event):
        rowid=self.treeview.identify_row(event.y)
        self.treeview.selection_set(rowid)
        it=self.treeview.selection()[0]
        print(self.treeview.item(it,'values')[0])

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()

正如我从评论中读到的,您需要一些函数来从树视图中提取当前选择(或其中的一部分),对选择上的另一个树视图执行触发操作。

因此您可以完美地使用虚拟<<TreeviewSelect>>-建议活动@CommonSense。

As per 文档 http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-Treeview-events.html:

45.1. Virtual events for the ttk.Treeview widget

Certain state changes within a Treeview widget generate virtual events that you can use to respond to these changes; see Section 54.8, “Virtual events”.

  • 每当选择发生变化时,无论是项目被选中还是未被选中,小部件都会生成一个“>”事件。
  • 每当打开一个项目时,小部件都会生成一个“>”事件。
  • 每当关闭一个项目时,小部件都会生成一个“>”事件。

然后使用ttk.treeview.focus()获取当前选择的iid. ttk.treeview.item(ttk.treeview.focus())将为您提供需要操作的项目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ttk Treeview:跟踪键盘选择 的相关文章

随机推荐

  • 具有多个嵌入 Segue 的 ContainerView

    有没有办法让单个 ContainerView 具有多个嵌入序列 目的是让 ContainerView 根据按下的按钮来容纳一些不同的 ViewController 一次只能看到一个 我想使用嵌入序列 以便在 Interface Builde
  • OData 按最大值和字段过滤

    数据集包含具有以下键的记录 userID period and points 是否可以查询一条记录period and by max points 示例场景 Dataset period 2016 01 01 userID 1 period
  • 有没有办法让Resharper 4.5理解多行TODO或NOTE?

    有没有办法让Resharper 4 5理解多行TODO或NOTE 例如 这将在 TODO 资源管理器中显示为两个项目 NOTE Because of the external dependency this method is partic
  • PHP 中的 Javascript“unes​​cape”

    我的图像主机有一个 Google Chrome 扩展程序 它会向我的网站发送一个 URL 该网址得到encoded通过 JavaScript 的escape method 编码的 URLescape看起来像这样 http 253A 4 bp
  • 我可以使用 sed 命令将多个空行替换为一个空行吗?

    我知道 SO 中也有类似的问题如何在 bash 中用单个空行替换多个空行 https stackoverflow com questions 922449 how can i replace mutliple empty lines wit
  • 我可以在 git 中使用单个命令推送到多个存储库吗?

    基本上我想做一些类似的事情git push mybranch to repo1 repo2 repo3 现在我只是多次输入push 如果我急于完成push 我只需将它们全部发送到后台git push repo1 git push repo2
  • 在这种情况下设置 EnableEventValidation="false" 是否存在安全风险?

    我有一个包含用户控件的页面 当用户单击图像按钮将其带到另一个显示他们单击的表行项目的详细信息的页面时 会发生错误 System ArgumentException Invalid postback or callback argument
  • Xcode 4 自动完成错误

    您是否还面临 Xcode 4 自动完成功能的问题 该功能过去在 3 x x 版本上运行良好 我已经在 Prefix 中导入了一些类 但 Xcode 不想帮助我输入代码 我必须手动添加上面的 implementation 导入 myclass
  • 在高图表中突出显示一系列条形图中的一个条形图?

    我有一个图表 显示堆叠和分组的条形图 类似于这个演示 http www highcharts com demo column stacked and grouped 有没有办法从 JavaScript 代码中使系列之一中的其中一个栏突出显示
  • 如何使用 Windows 命令行环境查找和替换文件中的文本?

    我正在使用 Windows 命令行环境编写批处理文件脚本 并希望用另一个文件 例如 BAR 更改文件中某些文本 例如 FOO 的每次出现 最简单的方法是什么 有内置函数吗 这里的很多答案都帮助我指明了正确的方向 但是没有一个适合我 所以我发
  • 如何将美国人口普查局的州级形状文件合并为全国性形状

    人口普查局不提供全国范围内公共使用微数据区域的形状文件 美国社区调查中可用的最小地理区域 我尝试用几种不同的方法将它们结合起来 但即使是消除重复标识符的方法一旦到达加利福尼亚州也会崩溃 我是在做一些愚蠢的事情还是需要一个困难的解决方法 下面
  • 各种 Istio 端口是如何使用的?

    Question 我正在尝试学习 Istio 并且正在设置我的 Istio Ingress Gateway 当我设置它时 有以下端口选项 如此处所示 https istio io latest docs reference config i
  • 如何防止机器人程序和垃圾邮件 API 请求?

    我正在使用react native 开发一个Android 应用程序 该应用程序与我正在为该应用程序开发的API 进行通信 该 API 是使用 Laravel 和 Laravel Passport 构建的 我知道 Android 应用程序可
  • 循环遍历服务器上的数据库,并更新数据

    我有一台带有多个数据库的服务器 我需要循环访问这些数据库并更改每个数据库中的一个记录 一个表中的值 如何才能做到这一点 EXEC sp MSForEachDB Use UPDATE dbo MyTable SET MyValue 999
  • 当 querySelectorAll 在不使用库的情况下不可用时,按属性获取元素?

    p 你怎样才能做到相当于 document querySelectorAll data foo where 查询选择器全部 https developer mozilla org en DOM Document querySelectorA
  • 如何让 Rails 资产管道生成源地图?

    我想让 Rails 与编译后的 CoffeeScript 缩小的 JS 一起生成源映射 以便更好地记录错误 不过 网上似乎还没有关于如何执行此操作的全面文档 有人这样做过吗 我使用 Rails 3 2 和 Heroku Rails 支持缩小
  • 链接 llvm 库

    我正在开发一个基于 llvm 的编译器 当我尝试生成可执行文件时 会发生以下错误 bin llvmcode s 35 对 operator new unsigned long 的未定义引用 请注意 在生成的 IR 中 调用了位于 llvm
  • 检查字段是否存在于数组的子文档中

    我有一个与此类似的架构 id Number line items id String quantity Number review request sent Boolean total price String name String or
  • 以一定角度遍历二维数组

    通常我们按行或列遍历数组 但这里我想以角度遍历它 我会尝试解释我的意思 因此 假设角度是 45 度 那么它会搜索为 0 0 then 0 1 1 0 then 0 2 1 1 2 0 等等 抱歉 无法上传图像 因为我是新用户 不允许这样做
  • Ttk Treeview:跟踪键盘选择

    这是一个带有 ttk 树视图的 Tk 小部件 当用户单击该行时 会执行某些功能 此处仅打印项目文本 我需要的是以下内容 最初的重点是文本输入 当用户按下 Tab 键时 焦点应该转到第一行 并且应该执行绑定到 Click 事件的函数 当用户使