Я создаю приложение Python (3.7.4) для отображения элементов из текстовой базы данных руководств поставщиков. Одной из функций является отображение списка «наименований предметов» из базы данных для каждого руководства (он же «продукт»). Для этой функции я использую прокручиваемый виджет текстового поля Tkinter и просто строю строки с именами элементов с помощью вкладок для их разделения. Я хотел бы вставить маленький значок (16x20 пикселей) перед каждым именем элемента, и успешно сделал это, используя код ниже. Проблема, с которой я сталкиваюсь, заключается в том, что для больших руководств в базе данных (например, 10K + имен элементов) я получаю значительное снижение производительности из функции image_create. Без вставки изображений отображение списка имен элементов происходит почти мгновенно для имен элементов размером 10К. При вставке изображений это может занять до 10-12 секунд.
Есть предложения по улучшению производительности? Я даже пытался создать шрифт «изображения» с помощью FontForge, но предпочел бы не go этот маршрут, если это возможно.
Заранее благодарен за вашу помощь.
По Брайану Оукли запрос, я прикрепил исполняемый код здесь. Если вы откомментируете следующие строки:
tabContents_text.image_create("current", image=open_book_image)
, вы увидите разницу в производительности.
Ссылка на файл png ЗДЕСЬ
import tkinter as tk
import tkinter.scrolledtext as tkst
win = tk.Tk()
frame1 = tk.Frame(master = win)
frame1.pack(fill='both', expand='yes')
win.state('zoomed')
tabContents_text = tkst.ScrolledText(frame1, cursor="arrow", wrap="none", tabs=150, font=('helvetica', 10, 'normal'))
tabContents_text.pack(side='top')
open_book_image = tk.PhotoImage(file="C:\\Users\\rhkea\\Downloads\\document_icon.png")
product_item_list=[]
for i in range(10000):
product_item_list.append("Item" + str(i).zfill(5))
col_count=4
row_count=2500
row_remain=0
tabContents_text.delete("1.0", "end")
row = 0
item = 0
while row < row_count:
col = 0
while col < col_count:
# tabContents_text.image_create("current", image=open_book_image)
tabContents_text.insert("end", product_item_list[item] + '\t')
col += 1
item += 1
tabContents_text.insert("end", "\n")
row += 1
col = 0
while col < row_remain:
# tabContents_text.image_create("current", image=open_book_image)
tabContents_text.insert("end", product_item_list[item] + '\t')
col += 1
item += 1
tabContents_text.insert("end", "\n")
win.mainloop()