laborless / app_sim_ssd1327

GUI APP that interact with SSD1327 driver
0 stars 0 forks source link

replace Text widget to Treeview #3

Open laborless opened 1 week ago

laborless commented 1 week ago

Replace Text widget to Treeview (If it's better for data management and performance)

example code below TreeView with Ctrl+C handling: ''' import tkinter as tk from tkinter import ttk from tkinter.messagebox import showinfo

class App(tk.Tk): def init(self): super().init()

self.root = tk.Tk()

    self.title('Treeview demo')
    self.geometry('620x200')

    self.tree = self.create_tree_widget()

def create_tree_widget(self):
    columns = ('first_name', 'last_name', 'email')
    tree = ttk.Treeview(self, columns=columns, show='headings')

    # define headings
    tree.heading('first_name', text='First Name')
    tree.heading('last_name', text='Last Name')
    tree.heading('email', text='Email')

    # tree.bind('<<TreeviewSelect>>', self.item_selected)
    tree.bind('<Control-c>', self.copy)
    tree.grid(row=0, column=0, sticky=tk.NSEW)

    # add a scrollbar
    scrollbar = ttk.Scrollbar(self, orient=tk.VERTICAL, command=tree.yview)
    tree.configure(yscroll=scrollbar.set)
    scrollbar.grid(row=0, column=1, sticky='ns')

    # generate sample data
    contacts = []
    for n in range(1, 100):
        contacts.append((f'first {n}', f'last {n}', f'email{n}@example.com'))

    # add data to the treeview
    for contact in contacts:
        tree.insert('', tk.END, values=contact)

    return tree

def copy(self, event):
    sel = self.tree.selection() # get selected items
    self.tree.clipboard_clear()  # clear clipboard
    # copy headers
    headings = [self.tree.heading("#{}".format(i), "text") for i in range(len(self.tree.cget("columns")) + 1)]
    self.tree.clipboard_append("\t".join(headings) + "\n")
    for item in sel:
        # retrieve the values of the row
        values = [self.tree.item(item, 'text')]
        values.extend(self.tree.item(item, 'values'))
        # append the values separated by \t to the clipboard
        self.tree.clipboard_append("\t".join(values) + "\n")
# def item_selected(self, event):
#     for selected_item in self.tree.selection():
#         item = self.tree.item(selected_item)
#         record = item['values']
#         # show a message
#         showinfo(title='Information', message=','.join(record))

if name == 'main': app = App() app.mainloop() '''

tommy15433 commented 1 week ago

treeview insert at last and delete first every 1 second tested.

import threading import time

ending_time = time.time() + 1

def threading_timer():

tt = threading.Timer(1,)

window=tkinter.Tk() window.title("YUN DAE HEE") window.geometry("640x400+100+100") window.resizable(False, False)

def cc(self): treeview.tag_configure("tag2", background="red")

treeview=tkinter.ttk.Treeview(window, columns=["one", "two"], displaycolumns=["two", "one"]) treeview.pack()

treeview.column("#0", width=70) treeview.heading("#0", text="idx")

treeview.column("one", width=100, anchor="center") treeview.heading("one", text="value", anchor="e")

treeview.column("#2", width=100, anchor="w")

treeview.heading("two", text="ASCII", anchor="center")

treelist=[("A", 65), ("B", 66), ("C", 67), ("D", 68), ("E", 69)]

scrollbar = tkinter.ttk.Scrollbar(window, orient=tkinter.VERTICAL, command=treeview.yview)

scrollbar.grid(row=0, column=1, sticky='ns')

treeview.config(yscrollcommand=scrollbar.set) scrollbar.pack(side='right', fill='y') for i in range(100000): treeview.insert('', 'end', text="text", values=[i])

for i in range(len(treelist)):

treeview.insert('', 'end', text=i, values=treelist[i], iid=str(i)+"번")

top=treeview.insert('', 'end', text=str(len(treelist)), iid="5번", tags="tag1")

top_mid1=treeview.insert(top, 'end', text="5-2", values=["SOH", 1], iid="5번-1")

top_mid2=treeview.insert(top, 0, text="5-1", values=["NUL", 0], iid="5번-0", tags="tag2")

top_mid3=treeview.insert(top, 'end', text="5-3", values=["STX", 2], iid="5번-2", tags="tag2")

treeview.tag_bind("tag1", sequence="<>", callback=cc)

def onTimerElapsed(): print("1sec") threading.Timer(1, onTimerElapsed).start() treeview.insert('', 'end', text="new", value=['zzz']) treeview.delete(treeview.get_children()[0])

onTimerElapsed() window.mainloop()

laborless commented 6 days ago

well done i'll contact you this afternoon for the further discussion.