【问题标题】:ttk treeview: selected colorttk 树视图:选择的颜色
【发布时间】:2011-12-15 03:59:29
【问题描述】:

我的 ttk 树视图的选定行显示为深蓝色背景,文本为白色。

如果我用标签设置行的颜色,例如:

self.tree.item(item, tags=('oddrow'))

并将标签配置为颜色,例如:

self.tree.tag_configure('oddrow', background='lightgrey')

并选择奇数行,背景颜色不会改变(它仍然是浅灰色),而文本从黑色变为白色。无论该行是否带有颜色标记,如何使选定的行背景为深蓝色?

行无标记为白色的黑色显示,或在深蓝色上选择白色。

我试过了

ttk.Style().configure('Treeview', selectbackground='blue')

但这并没有做任何事情。

编辑:我想当我选择一个项目时,我可以将它重新标记为非奇数,然后在它未被选中时返回,但这很不雅。

【问题讨论】:

  • 你试过self.tree.tag_configure('oddrow', background='lightgrey', selectbackground='blue')吗?
  • @StevenRumbalski: _tkinter:TclError: 未知选项“-selectbackground”
  • 只需阅读tcl.tk/man/tcl/TkCmd/ttk_treeview.htm#M69 的文档即可。标签仅支持前景、背景、字体和图像。很抱歉给你不好的建议。
  • 不用担心。感谢您的尝试

标签: python tkinter treeview ttk


【解决方案1】:

从树的TkDocs tutorial 看来,您可以:

  • 使用所需颜色创建标签(用于选定行)

然后,从树形视图中捕获虚拟事件:

  • 当标签获得焦点时将其分配给一行
  • 当标签失去焦点时从行中取消分配标签

这是我使用的文档中的特定段落:

The treeview will generate virtual events "<TreeviewSelect>", "<TreeviewOpen>" 
and "<TreeviewClose>" which allow you to monitor changes to the widget made 
by the user.   You can use the "selection" method to determine the current 
selection (the selection can also be changed from your program). 

连同教程中的一些代码:

tree.tag_configure('ttk', background='yellow')
tree.tag_bind('ttk', '<1>', itemClicked); # the item clicked can be found via tree.focus()

注意:我不确定这是否可行。我必须挖掘代码才能看到我做了什么。

【讨论】:

  • 这基本上就是我最终要做的,正如我在编辑中相当神秘地提到的那样。选择行时(使用)监视),我用备用颜色返回所有行(清除任何先前的更改),然后用普通背景标记当前行,以便正确显示默认选择颜色。 span>
  • @foosion -- 我的意思是建议标记/取消标记 only 选定的行。也就是说,保留所有oddrows 的标记方式,并将第二个标记添加到选定的行。我不确定的是,如果您在一行上有两个标签会发生什么 - 哪个胜出?
  • 我正在做的一些事情是删除行、添加行、移动行,因此重新标记所有内容通常是有意义的。另一种选择是取消标记所选行(这使选择背景看起来正确;或者用选择颜色标记它),然后在选择更改时重新标记它。
【解决方案2】:

如果有人在寻找更改 tkinter 树视图的选定颜色的答案,您可以查看以下代码。

您已将状态更改为“已选择”而不是“活动”。

style = ttk.Style()
style.configure("Treeview",
                background="#E1E1E1",
                foreground="#000000",
                rowheight=25,
                fieldbackground="#E1E1E1")
style.map('Treeview', background=[('selected', '#BFBFBF')])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-09
    • 2010-10-28
    • 2017-02-06
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多