Tkinter:列表框分隔符、禁用项目、键盘导航?

Posted

技术标签:

【中文标题】Tkinter:列表框分隔符、禁用项目、键盘导航?【英文标题】:Tkinter: Listbox separators, disabled items, keyboard navigation? 【发布时间】:2011-05-07 15:00:27 【问题描述】:

我正在研究 Tkinter 列表框小部件,但无法找到以下功能的解决方案:

    如何创建不可选择的水平分隔符项目,例如。分隔符相当于 Tkinter 菜单小部件的 .add_separator()? (使用破折号和下划线之类的字符看起来很糟糕)。

    如何禁用特定项目?我尝试使用 .itemconfig( index, state='disabled' ) 没有成功。

    如何启用键盘导航,例如。当用户的键盘输入自动向前滚动到以用户键入的文本开头的最近项目时?我必须bind(<KeyPress>, ...) 自己管理这种行为吗?

    使用 Text 小部件或 ttk.Treeview 小部件是否更容易实现上述某些功能?

【问题讨论】:

我建议你单独问这些会得到更好的答复。 @Steven:我不确定社区对于如何分块问题的态度。我会将以后的帖子分解为单独的问题。 @Malcom 我也不确定社区对此有何看法。我读了你的问题,以为我可以回答其中几个,但没有回答,因为我无法回答整个问题。 @Steven:如果您的答案与 Bryan 不同,请告诉我,我会将我原来的问题作为单独的问题重新发布。以后我会发布更多细化的问题。 @Malcom:Bryan 完全正确。 【参考方案1】:

    你不能。小部件不支持。

    您不能禁用某些项目,小部件不支持状态属性。话虽如此,如果用户选择了禁用的东西,您可以监控选择并执行适当的操作,并使用项目前景来表示禁用。

    您需要绑定到按键事件并自行管理行为。不是特别难,就是有点乏味。

    文本小部件可能是您最好的选择,尽管您必须添加绑定以模仿列表框的默认绑定。

底线:Tkinter 没有提供任何直接支持您想要做的事情,但构建块都在那里。你只需要自己构建它。

【讨论】:

谢谢。模拟残疾的聪明想法(2)。我将搜索 Unicode 字符作为比传统破折号或下划线更好的分隔符。

以上是关于Tkinter:列表框分隔符、禁用项目、键盘导航?的主要内容,如果未能解决你的问题,请参考以下文章

更改 tkinter 列表框中的项目顺序

永久添加/删除tkinter列表框中的项目

使用箭头键滚动的 Tkinter 列表框

tkinter 列表框用 python 拖放

Selectize是文本框和<;选择>;盒它';基于jQuery,具有自动完成和原生感觉的键盘导航功能;用于标记、联系人列表等。

控件中数据模板禁用小键盘减号折叠