python Tkinter文本板事件绑定,用于大量条目.崩溃图形用户界面



我正在尝试在 Tkinter 中做一个 GUI,我在文本板中有 100 万个条目。因此,我将一个函数绑定到鼠标单击时应调用的每个条目。但是当条目插入到文本板并绑定到功能时,在 60 万个条目之后,GUI 开始冻结(我目前正在使用 python-SQL 来减少 RAM 上的内存使用量(。

traces=sql_database.debug_read(id_count)    #reading data from SQL
x1=0     #tag number for binding
for i in range(len(traces)): 
    Id,t_s,tra_id,t_d=traces[i]    #splitting data to be printed
    m,g,s_t=dict2[tra_id]          #checking data with a dictionary 
    filtered_data=t_s+tra_id+t_d
    data_to_print=str(t_s)+'t '+m+'t '+g+'t '+s_t
    textPad.insert('end',data_to_print,x1)
    if i%20000==0: 
          mainWindow.update() 
          textPad.see(END)
    textPad.tag_bind(x1,'<1>'(lambda e,x1=x1:decoder_fun(x1,t_d)))
    x1=x1+1

如果没有事件绑定,GUI 工作正常。.CPU 使用率和 RAM 使用率中等,具有绑定性。

我没有使用文本板,而是使用了列表框,它提供了获取列表框中每个内容的好方法。在列表框事件中,我们可以获取发生鼠标点击的索引,使用该索引,我可以与列表框中的各个条目进行交互(调用函数(。而且我只需要对整个列表框条目进行一次绑定

import Tkinter
from Tkinter import *
def callback(event):
    index=w.curselection()
    #print index
    print w.get(index)

root=Tkinter.Tk()
scrollbar = Tkinter.Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=Y)
w=Tkinter.Listbox(root)
w.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=w.yview)
for i in range(20):
    w.insert(i,i)
w.pack()
def ons():
    w.delete(1,END)
w.bind('<<ListboxSelect>>',callback)
b=Tkinter.Button(root,command=ons)
b.pack()
root.mainloop()

curselection(( 将给出发生鼠标点击的索引。get(index( 将给出该索引号的列表框中的条目。我们必须使用"ListboxSelect"绑定才能将这些方法用于鼠标单击事件。更多选项在此链接中:https://www.tutorialspoint.com/python/tk_listbox.htm

最新更新