3 различные проблемы с TTK treeviews в python

Я делаю чат-клиент с помощью treeview С несколькими столбцами в Python.

этот код treeview:

chat = ttk.Treeview(height="26", columns=("Nick","Mensaje","Hora"), selectmode="extended")
chat.heading('#1', text='Nick', anchor=W)
chat.heading('#2', text='Mensaje', anchor=W)
chat.heading('#3', text='Hora', anchor=W)
chat.column('#1', stretch=NO, minwidth=0, width=130)
chat.column('#2', stretch=NO, minwidth=0, width=620)
chat.column('#3', stretch=NO, minwidth=0, width=65)
chat.column('#0', stretch=NO, minwidth=0, width=0) #width 0 to not display it

и я добавляю такие элементы:

chat.insert("", "end", "", values=((user, message, time)), tags=(messageid))
chat.tag_configure(messageid, foreground='#ff0000')

теперь, это работает отлично (вот скриншот в качестве примера):screenshot но эта последняя строка кода меняет цвет всех 3 столбцов в этой строке. Я хочу изменить только цвет текста столбца #2 (только сообщение) и не всего подряд (не ник или столбцы времени). Я пытался в течение длительного времени, но сейчас 4 утра, и я сдаюсь ☹ есть ли способ сделать это?

Обновление через 2 недели

теперь я попытался сделать 3 разных treeviews (по 1 столбцу каждый), и это заканчивается таким образом: Хотя это устраняет проблему цвета, у меня есть новая проблема: полоса прокрутки. Есть ли способ связать полосу прокрутки с 3 различными видами деревьев? все мои попытки провалились до сих пор, и я могу переместить только один из treeview с помощью полоса прокрутки. Можно привязать к 3 treeviews? (Если да, то как? стоит? а должен?)

а также еще одна проблема: все попытки удалить границу treeview потерпели неудачу в TTK python.

другая проблема заключается в том, что теперь mensaje treeview отображает только первое слово. Не знаю, почему ни: это новый код о первой проблеме слова.

chat2 = ttk.Treeview(height="28", columns="Mensaje", selectmode="extended")
chat2.heading('#1', text='Mensaje', anchor=CENTER)
chat2.column('#1', stretch=NO, minwidth=400, width=620)
chat2.column('#0', stretch=NO, minwidth=0, width=0)

и это идет на сообщение:

BotGUI.chat2.insert("", "end", iid=(idmensajeactual), values=mensaje, tags=(messageid))
try:
  BotGUI.chat2.tag_configure(messageid, foreground='#'+colorfuente) #tfl
except TclError:
  print("[Error02] - can't assign colour of "+ usuario +".")

2 ответов


1. Первый Вопрос: Scrollbar

решение состоит из создания ТТК верхнего уровня.Объект Treeview и другое дерево для каждого столбца. Активации полос прокрутки связаны с представлением дерева верхнего уровня. Это немного более громоздко, чем иметь три столбца в одном объекте дерева, но он работает:

# Top level Treeview object
bot =  ttk.Treeview( Tkinter.Tk() )

# Columns (treeview objects also)
columns = create_columns( bot)

################################
## Scrollbars
vsb = ttk.Scrollbar(    bot,
                        orient="vertical", 
                        command = bot.yview
                        )

hsb = ttk.Scrollbar(    bot,
                        orient="horizontal",
                        command = bot.xview
                        )

## Link scrollbars activation to top-level object
bot.configure(  yscrollcommand=vsb.set,
                xscrollcommand=hsb.set) 
## Link scrollbar also to every columns
map ( lambda col : col.configure(   yscrollcommand=vsb.set,xscrollcommand=hsb.set), columns )

второй вопрос : граница/хребта

используйте объект конфигурации стиля

ttk.Style().configure(  '.',              # every class of object
            relief = 'flat',  # flat ridge for separator
            borderwidth = 0,  # zero width for the border
                )
он не будет работать на Windows: это ошибка (или функция :p ).

Windows полностью игнорирует , ttk будет применяться "This" в первом столбце, "is" ко второму и так далее ... Чтобы обеспечить тот факт, что сообщение должно применяться в целом, просто добавьте кому в конце:(idmensajeactual,)

этот код работает :

chat2.insert("", "end", iid=(idmensajeactual,) , values=mensaje, tags=(messageid))

наконец-то

я загрузил свой заглушку как GitHub gist. Вы можете проверить его здесь и настроить его под свои нужды : https://gist.github.com/lucasg/7643411

выход :

enter image description here


Я могу ответить на часть вашего вопроса: Как избавиться от Treeview border:

style = ttk.Style()
style.layout("Treeview", [
    ('Treeview.treearea', {'sticky': 'nswe'})
])