【问题标题】:Tkinter TreeView remove dotbox highlightTkinter TreeView 删除点框高亮
【发布时间】:2018-03-26 19:04:00
【问题描述】:

您好,当我选择 TreeView 的某一行时,我正在尝试删除 dotbox 高亮,它会突出显示还包含图像的第一列的文本:

我是新手,但我猜这是因为第一列不是使用构造函数创建的,而是与其他列分开的,如下例所示:

    f = ttk.Frame(master)
    f.pack(fill=BOTH, expand=True)
    self.dataCols = ('Project Name','Status', 'Cores', 'Added date/time')
    self.tree = ttk.Treeview(columns=self.dataCols)
    self.tree.grid(in_=f, row=0, column=0, sticky=NSEW)
    self.tree.heading('#0', text='', anchor='center')
    self.tree.heading('#1', text='Project Name', anchor='center')
    self.tree.heading('#2', text='Status', anchor='center')
    self.tree.heading('#3', text='Cores', anchor='center')
    self.tree.heading('#4', text='Added date/time', anchor='center')
    self.tree.column('#0', anchor='center', width=1)
    self.tree.column('#1', anchor='w')
    self.tree.column('#2', anchor='center')
    self.tree.column('#3', anchor='center')
    self.tree.column('#4', anchor='center')
    f.rowconfigure(0, weight=1)
    f.columnconfigure(0, weight=1)
    style = ttk.Style(master)
    style.configure('Treeview', rowheight=38)

以这种方式实现的目的是允许将图像作为列值。

编辑

这就是我向 Treeview 插入行的方式。

    self.tree.insert('', 'end', image=auxiliary_classes.global_data.img_container[obj.name],
                     value=obj.get_list())

编辑:

    style = ttk.Style(master)
    style.theme_use('clam')

    style.layout('nodotbox.Treeview.Item',
                 [('Treeitem.padding',
                   {'children': [('Treeitem.indicator', {'side': 'left', 'sticky': ''}),
                                 ('Treeitem.image', {'side': 'left', 'sticky': ''}),
                                 ('Treeitem.text', {'side': 'left', 'sticky': ''})],
                    'sticky': 'nswe'})])

    style.configure(style='nodotbox.Treeview')

编辑:

这段代码成功了!

    style = ttk.Style()
    style.layout("Treeview.Item",
                 [('Treeitem.padding', {'sticky': 'nswe', 'children':
                     [('Treeitem.indicator', {'side': 'left', 'sticky': ''}),
                      ('Treeitem.image', {'side': 'left', 'sticky': ''}),
                      # ('Treeitem.focus', {'side': 'left', 'sticky': '', 'children': [
                      ('Treeitem.text', {'side': 'left', 'sticky': ''}),
                      # ]})
                      ],
                                        })]
                 )

【问题讨论】:

    标签: python tkinter treeview


    【解决方案1】:

    点框高亮是样式的一部分,因此您可以通过更改树视图样式的布局来删除它。

    默认布局是

    [('Treeitem.padding',
      {'children': [('Treeitem.indicator', {'side': 'left', 'sticky': ''}),
        ('Treeitem.image', {'side': 'left', 'sticky': ''}),
        ('Treeitem.focus',
         {'children': [('Treeitem.text', {'side': 'left', 'sticky': ''})],
          'side': 'left',
          'sticky': ''})],
       'sticky': 'nswe'})]
    

    并且点框是'Treeitem.focus',所以如果你创建一个没有它的自定义布局,那么它将不再可见:

    style = ttk.Style(master)
    
    style.layout('nodotbox.Treeview.Item', 
                 [('Treeitem.padding',
                   {'children': [('Treeitem.indicator', {'side': 'left', 'sticky': ''}),
                     ('Treeitem.image', {'side': 'left', 'sticky': ''}),
                     ('Treeitem.text', {'side': 'left', 'sticky': ''})],
                    'sticky': 'nswe'})])
    
    tree.configure(style='nodotbox.Treeview')
    

    编辑:完整示例:

    import tkinter as tk
    from tkinter import ttk
    
    master = tk.Tk()
    
    style = ttk.Style(master)
    
    style.layout('nodotbox.Treeview.Item', 
                 [('Treeitem.padding',
                   {'children': [('Treeitem.indicator', {'side': 'left', 'sticky': ''}),
                     ('Treeitem.image', {'side': 'left', 'sticky': ''}),
                     ('Treeitem.text', {'side': 'left', 'sticky': ''})],
                    'sticky': 'nswe'})])
    
    tk.Label(master, text='Default layout').pack()
    tree1 = ttk.Treeview(master, columns=('a', 'b'))
    tree1.insert('', 'end', text='item 1', values=('a', 'b'))
    tree1.insert('', 'end', text='item 2', values=('a', 'b'))
    tree1.pack()
    
    tk.Label(master, text='No dotbox').pack()
    tree2 = ttk.Treeview(master, style='nodotbox.Treeview', columns=('a', 'b'))
    tree2.insert('', 'end', text='item 1', values=('a', 'b'))
    tree2.insert('', 'end', text='item 2', values=('a', 'b'))
    tree2.pack()
    
    master.mainloop()
    

    【讨论】:

    • 不幸的是,结果不是我想要的结帐我的树形视图现在的样子imgur.com/a/NnRH2,请检查突出显示是否仍然存在。
    • 您使用的是哪个操作系统?它适用于 Linux 和 Windows。
    • 我使用的是 Windows 7,这有点奇怪,因为即使你的默认布局在我设置时看起来也很奇怪,你猜为什么?
    • 可能是因为是默认linux主题的布局。您可以尝试使用“蛤蜊”主题(在更改布局之前执行style.theme_use('clam'))吗?
    • 嗨!,抱歉耽搁了,我已经尝试过使用主题“蛤蜊”,但仍然碰巧出现点框:/,检查上面的编辑以查看我使用的代码。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2012-08-04
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多