LINUX.ORG.RU

Производительность grid

 , ,


0

1

Добрый день. Я создаю текстовую таблицу в grid (см. скриншот). При этом создается 70 виджетов типа Label за 3 секунды. Если увеличить текст в 2 раза, то время создания таблицы увеличится до 6-7 секунд. Можно ли как-нибудь улучшить производительность?

Код такой:

#!/usr/bin/python3

import tkinter as tk

font='LiberationSerif 14'

def add_row(col,row_no):
	root.grid_rowconfigure(row_no,weight=0)
	for i in range(len(col)):
		tk.Label(root,text=col[i],font=font,wraplength=300,justify='left').grid(row=row_no,column=i,sticky='nw',padx=10)

root=tk.Tk()
article='''Общая лексика	неожиданный поворот дел	попытка	сделка	ход
	ходьба	движение	энергия	мода
	Габон (государство в юго-западной Африке)	присест (Баян)	заход (I cannot do it in one go - Я не могу сделать это за один заход / с первого захода Баян)	готовый к запуску
	готовый к пуску	готовый к эксплуатации	порция вина	порция кушанья
	употребление оборота	собираться сделать (что-л.)	бросок (в спортивных играх, кегельбане)	глоток (вина)
	порция (кушанья)	приступ (о болезни)	вести (о дороге, пути)	стать (стать кем-либо, стать каким-либо // A cop gone bad / We've gone green. / The Merciless is a story of good girls gone evil. 4uzhoj)
Австралийский сленг	принятое решение			
Американизм	с собой (fast food service scardanelli)			
Американизм	try (Let me have a go at solving the problem)			
Военный термин	"начинайте передачу"			
Военный термин	все в порядке	готов	о'кей	поехали
Интернет	переход (кнопка на вебсайте gconnell)			
Контроль качества	проход (надпись на приёмной стороне предельного калибра)			
Макаров	go (в сочетании с последующим герундием выражает действие, соответствующее значению герундия)			
'''

article=article.splitlines()
for i in range(len(article)):
	article[i]=article[i].split('\t')
	add_row(article[i],i)
root.mainloop()

Deleted

tktable. Если его можно подключить в этом вашем tkinter.

anonymous
()

Это же питон - я использую wx.

Shadow ★★★★★
()

С точки зрения Tk, здесь нужен промежуточный frame который будет pack-оваться в окно после заполнения.

antares0 ★★★★
()
Ответ на: комментарий от antares0

Это ничего не даст - во frame надо сначала напаковать 70 лейблов. Смотри tktable, tablelist, treeview наконец, короче все что может нарисовать таблицу, что из этого можно подключить в tkinter.

anonymous
()
Ответ на: комментарий от anonymous

Это ничего не даст - во frame надо сначала напаковать 70 лейблов.

Непакованый, то бишь не привязаный еще к окну frame будет заполняться гораздо быстрее.

antares0 ★★★★
()
Ответ на: комментарий от antares0

Можете привести пример кода? Я сделал так:

		tmp_frame=tk.Frame(root)
		lab=tk.Label(tmp_frame,text=col[i],font=font,wraplength=300,justify='left')
		lab.grid()
		tmp_frame.grid(row=row_no,column=i,sticky='nw',padx=10)
но быстрее не стало.

Deleted
()
Ответ на: комментарий от Deleted
#lot-of-labels.tcl
frame .fr;set step 14
for {set i 1;set x 1000000;set y 1000014} {$i < 50} {set x [incr y $step]; set y [incr x $step]; incr i} {grid [label .fr.l"$i"x -text $x] -row $i -column 0 -padx 10 -sticky nw;grid [label .fr.l"$i"y -text $y] -row $i -column 1 -padx 10 -sticky nw}
pack .fr
 wish lot-of-labels.tcl

На второпне рисует 100 label-ов за несущественое время.

antares0 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.