【问题标题】:"Convert" tk.ACTIVE to the index (line number) in a listbox“转换” tk.ACTIVE 为列表框中的索引(行号)
【发布时间】:2017-07-23 18:25:16
【问题描述】:

让我们摆脱形式:这是关于在 Windows 7 上运行的 Python 2.7.x。

我正在创建 Tkinter 列表框小部件的子类,我需要子类提供的一件事是包含当前活动(即具有焦点)行的索引(行号)的属性。我知道 Tkinter 支持所有采用索引的列表框方法的常量 tk.ACTIVE,但在我的自定义小部件中,此属性需要始终是 整数,而不是字符串。

我已经搜索了文档,但似乎没有方法可以返回活动行的索引,也没有办法将tk.ACTIVE“转换”为其有效索引号。像curselection()selection_includes() 这样的方法没有帮助,因为这个列表框总是会有selectmodetk.EXTENDED——这意味着可以选择任意数量的行,并且当前活动行可能会也可能不会就在其中。

我考虑使用事件绑定来等待箭头键、鼠标点击等,并寻找对 curselection() 元组的更改,但这也不是很有帮助或直接。例如。假设用户按住 shift-click 来选择一个范围——他可能会从上到下或从下到上,无论哪种方式,元组都只会显示范围,而不是哪一行是活动的。

那么:有没有办法(公开的或偷偷摸摸的,简单的或复杂的)获得tk.ACTIVE 行的等效索引号?

【问题讨论】:

  • 您“搜索”了哪些文档?列表框有一个index 方法,专门用于获取元素的数字索引。这种方法应该出现在大多数 tkinter 文档中。
  • @BryanOakley,天哪。我一直在使用从 New Mexico Tech Computer Center 下载的 PDF,由 John Shipman 撰写... python.org 链接到此作为推荐来源。我还检查了tutorialspoint.com/python/tk_listbox.htm。两个来源都对index 方法给出了相同的描述:“如果可能,定位列表框的可见部分,使包含索引 i 的行位于小部件的顶部。”没有一个关于它返回任何东西的消息,只有一个声明它重新定位当前滚动。
  • 这很不幸。这种描述是完全错误的。 index 方法只是将索引转换为其规范形式。 listbox 方法的官方文档是这样的:“返回与 index 对应的整数索引值。如果 index 为 end,则返回值是列表框中元素数的计数(不是最后一个元素的索引)。”我已经向该网站发送了一条消息让他们知道。

标签: python python-2.7 tkinter listbox


【解决方案1】:

获取列表框活动行的行号的方法是使用index方法:listbox.index(tk.ACTIVE)

【讨论】:

  • 非常感谢。请参阅上面我对 Bryan Oakley 的评论,了解为什么我错过了这个明显的答案。
猜你喜欢
  • 1970-01-01
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2018-09-09
  • 1970-01-01
  • 2019-11-03
相关资源
最近更新 更多