Это мой первый пост, извините, если я допустил ошибку в формате, я с удовольствием заменим его, если потребуется.
Я создаю интерфейс для анализа научных данных с использованием Tkinter. Для списка молекул четыре могут быть представлены в отдельных графиках. На стороне, я использую Treeview, чтобы показать некоторые цифры обо всех молекулах. (а не только отображаемые) Когда строка в древовидной структуре относится к отображаемому графику, я хочу, чтобы текст этой строки был одного цвета.
Для каждого отображаемого графика я помещаю отдельный тег в строку, представляющую его, а затем использую метод тегов, чтобы изменить цвет переднего плана на цвет графика.
Код раньше работал нормально, но теперь он перестал работать без каких-либо изменений в моем коде. Настройка цвета переднего плана с помощью тегов не меняет цвет. Несколькими строками позже я также использую этот метод, чтобы изменить строку на жирный, и она прекрасно работает.
Мне удалось подтвердить, что строки кода прочитаны правильно: если я установил цвет на значение, которое не распознается, я получаю ошибку tkinter при выполнении, как ожидалось. Кроме того, при использовании некоторых распечаток if / elif выполняется в нужный момент в нужный момент (без ошибок в логических тестах).
Код отлично работает на другом компьютере, что наводит меня на мысль, что есть проблема с некоторыми пакетами Python. Оба компьютера имеют одинаковую версию ttk (0.3.1), и я обновил все свои модули, заметив проблему, чтобы убедиться, что это не устаревший пакет.
Единственное изменение, которое было внесено в компьютер, - это удаление и повторная установка anaconda и среды с добавленной установкой (с pip) pyinstaller в используемую среду (когда я устанавливал pyinstaller в исходной среде, я по ошибке изменил другой важный пакет и пришлось заново установить anaconda, чтобы он снова заработал)
Я попытался создать другую идентичную среду без модуля pyinstaller, и я получил тот же результат.
Я потерял счет, сколько раз я удалял и переустанавливал anaconda для устранения проблем. Если это возможно, я бы очень хотел, чтобы вам не пришлось заново его переустанавливать
Я выделил часть кода интерфейса, который создает объект treeview. После тестирования фрагмент кода, приведенный ниже, вызывает ту же проблему.
import tkinter as tk
from tkinter import ttk
import numpy as np
class Testy():
def __init__(self, root):
#Values set in other part of the interface
self.Classes = ['Molecule1','Molecule2','Molecule3','Molecule4',
'Molecule5','Molecule6']
self.Single_Kinetic_Menu_Var = [tk.StringVar(value = 'Molecule1'),
tk.StringVar(value = 'Molecule3'),
tk.StringVar(value = 'Molecule4'),
tk.StringVar(value = 'Molecule5')]
self.Experiment_Count = np.zeros([len(self.Classes),2])
#Treeview widget making
Tree = ttk.Treeview(root)
Tree.grid(column = 0, row = 0)
Headings = ('first count','second count')
Tree['column'] = Headings
Tree.column("#0", width=100, minwidth=100)
Tree.heading("#0",text="Class")
for i in range(len(Headings)) :
Tree.column(Headings[i])
Tree.heading(Headings[i], text = Headings[i])
#Insert all classes and their counts
Empty = []
Total = []
Total = list(Total)
for Idx, Class in enumerate(self.Classes) :
Values = []
if Idx == len(self.Classes)-1 :
for Number in self.Experiment_Count[Idx,:] :
Values.append(str(Number))
Empty.append('-')
Total.append(0)
else :
for Number in self.Experiment_Count[Idx,:] :
Values.append(str(Number))
Values = tuple(Values)
if Class == self.Single_Kinetic_Menu_Var[0].get() :
Tree.insert("", Idx, text = Class, values=Values, tags = ('BLUE'))
Tree.tag_configure('BLUE', foreground = 'blue')
elif Class == self.Single_Kinetic_Menu_Var[1].get() :
Tree.insert("", Idx, text = Class, values=Values, tags = ('RED'))
Tree.tag_configure('RED', foreground = 'red')
elif Class == self.Single_Kinetic_Menu_Var[2].get() :
Tree.insert("", Idx, text = Class, values=Values, tags = ('GREEN'))
Tree.tag_configure('GREEN', foreground = 'green')
elif Class == self.Single_Kinetic_Menu_Var[3].get() :
Tree.insert("", Idx, text = Class, values=Values, tags = ('CYAN'))
Tree.tag_configure('CYAN', foreground = 'cyan')
else :
Tree.insert("", Idx, text = Class, values=Values)
Tree.insert('', len(self.Classes), text = '-', values = tuple(Empty))
Total = np.sum(self.Experiment_Count[:,:], axis = 0)
Tree.insert('',len(self.Classes)+1, text = 'TOTAL', values = tuple(Total),
tags = ('BOLD'))
Tree.tag_configure('BOLD', font = ('Calibri', 12, 'bold'))
def main():
Master = tk.Tk()
Master.title("interface")
Testy(Master)
Master.mainloop()
if __name__ == '__main__' :
main()
Как вы можете увидеть, запустив код, я ожидаю, что текст молекул 1, 3, 4 и 5 будет окрашен в синий, красный, зеленый и голубой цвета соответственно. Тем не менее, я могу видеть их только в черном цвете.