簡體   English   中英

Tkinter TreeView刪除點框突出顯示

[英]Tkinter TreeView remove dotbox highlight

嗨,當我選擇TreeView的某一行時,我試圖刪除點狀框高光,它突出顯示了第一列的文本,其中也包含圖像:

圖片

我是一個新手,但是正在猜測是因為第一列不是使用構造函數創建的,並且與其他列是分開的,如以下示例所示:

    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': ''}),
                      # ]})
                      ],
                                        })]
                 )

點框突出顯示是樣式的一部分,因此您可以通過更改樹視圖樣式的布局來將其刪除。

默認布局是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM