Guest User

Untitled

a guest
Jul 5th, 2022
449
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.57 KB | None | 0 0
  1. from tkinter import *
  2. from tksheet import Sheet
  3.  
  4. # How many rows to add per button press
  5. N = 100_000
  6.  
  7. class Cell:
  8.     __slots__ = ("value",)
  9.     def __init__(self, value: int):
  10.         self.value = value
  11.  
  12.     def __str__(self):
  13.         return str(self.value)
  14.  
  15. # Simulate getting some data from an SQL Query
  16. def get_rows():
  17.     return [tuple(Cell(1+6*row+i) for i in range(6)) for row in range(N)]
  18.  
  19. class App(Tk):
  20.     def __init__(self):
  21.         super().__init__()
  22.  
  23.         insert_rows = Button(self, text=f"Insert {N:,} rows", command=self.insert_rows)
  24.         insert_rows.grid(row=0)
  25.  
  26.         self.sheet = self._make_sheet()
  27.         self.sheet.grid(row=1)
  28.  
  29.  
  30.     def _make_sheet(self):
  31.         sheet = Sheet(self,
  32.             show_x_scrollbar=False,
  33.             total_columns=6,
  34.             column_width=60
  35.         )
  36.  
  37.         sheet.enable_bindings("single_select")
  38.         sheet.extra_bindings("cell_select", self.on_cell_select)
  39.         sheet.headers(["Index", "Order", "Artikel", "Kvalitet", "Format", "Antal"])
  40.  
  41.         return sheet
  42.  
  43.  
  44.     def on_cell_select(self, event):
  45.         cell: Cell = self.sheet.get_cell_data(event.row, event.column, return_copy=False)
  46.        
  47.         print(f"Changing cell at ({event.row}, {event.column}) from {cell.value} to {cell.value+1}")
  48.         cell.value += 1
  49.  
  50.         self.sheet.redraw()
  51.  
  52.  
  53.     def insert_rows(self):
  54.         rows = get_rows()
  55.         for row in rows:
  56.             self.sheet.insert_row(row)
  57.        
  58.         self.sheet.redraw()
  59.  
  60.  
  61. if __name__ == "__main__":
  62.     app = App()
  63.     app.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment