Advertisement
TorroesPrime

exp_01

Apr 24th, 2023 (edited)
749
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.96 KB | None | 0 0
  1. import tkinter as tk
  2. from functools import partial
  3. import pprint as pp
  4. from settings import *
  5. from search_results_fm import search_result_item as sri
  6. class exp_window():
  7.     def __init__(self):
  8.         self.root = tk.Tk()
  9.         self.root.title("Search")
  10.         self.root.geometry("995x550+25+25")
  11.         self.root.configure(bg=BG_COLOR)
  12.         self.root.resizable(RESIZE,RESIZE)
  13.         self.results_frame = results_frame(self.root)
  14.         self.test_win = tk.Toplevel(self.root)
  15.         self.test_win.title("Test controls")
  16.         self.test_win.geometry("850x350+700+200")
  17.         tk.Button(self.test_win,text="Test",font=FNT_NORMAL,bg=BG_COLOR,command=partial(self.results_frame.update_data,TEST_DATA)).grid(row=0,column=0,sticky="nsew",padx=MED_SPACE,pady=SMALL_SPACE)
  18.         tk.Button(self.test_win,text="Check Test Data",font=FNT_NORMAL,bg=BG_COLOR,command=partial(self.test_data,TEST_DATA)).grid(row=0,column=1,sticky="nsew",padx=MED_SPACE,pady=SMALL_SPACE)
  19.         self.test_win.bind("<Configure>",lambda event:self.check_details(event))
  20.     def test_data(self,data):
  21.         data = ""
  22.         for entry in TEST_DATA:
  23.             data += f"Title:{entry['title']}\nDescription:{entry['description']}\n\n"
  24.         tk.Label(self.test_win,text=data,font=FNT_NORMAL,bg=BG_COLOR).grid(row=2,column=0,sticky="nsew",padx=MED_SPACE,pady=SMALL_SPACE,columnspan=2)
  25.  
  26.     def check_details(self,event):
  27.         pp.pprint(event.widget.winfo_geometry())
  28.    
  29.     def run(self):
  30.         self.root.after(1000,self.test_win.mainloop())
  31.         self.root.mainloop()
  32.  
  33. class results_frame():
  34.     def __init__(self,root,results=[]):
  35.         self.results = results
  36.         self.root = root
  37.         self.frame = tk.Frame(self.root,bg=BG_COLOR,relief="groove",bd=2,width=750)
  38.         self.frame.pack(fill=tk.BOTH, expand=True)
  39.         self.results = []
  40.         self.first_run()
  41.     def test_binding(self,event):
  42.         print(f"I am scrolling in {event.widget}")
  43.     def first_run(self):
  44.         tk.Label(self.frame,text=SEARCH_HEADER,font=FNT_NORMAL,bg=BG_COLOR).grid(row=0,column=1,sticky="nsew",padx=MED_SPACE,pady=SMALL_SPACE)
  45.     def update_data(self,data):
  46.         self.results = data
  47.         self.display_results()
  48.     def clear_results(self):
  49.         for widget in self.frame.winfo_children():
  50.             widget.destroy()
  51.     def _on_enter(self,event):
  52.         print("I am hovering over the search results")
  53.     def _on_mousewheel(self, event):
  54.         print("spinning mouse wheel")
  55.         self.canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")
  56.     def display_results(self):
  57.         self.clear_results()
  58.         if len(self.results) > 0:
  59.             self.canvas = tk.Canvas(self.frame)
  60.             self.canvas.grid(row=0, column=0, sticky=tk.NSEW)
  61.             scrollbar = tk.Scrollbar(self.frame, orient=tk.VERTICAL, command=self.canvas.yview)
  62.             scrollbar.grid(row=0, column=1, sticky=tk.NS)
  63.             self.canvas.configure(yscrollcommand=scrollbar.set)
  64.             scrollable_frame = tk.Frame(self.canvas)
  65.             self.canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
  66.             row = 1
  67.             tk.Label(scrollable_frame,text=SEARCH_RESULTS_HEADER,font=FNT_NORMAL,bg=BG_COLOR).grid(row=0,column=1,sticky="nsew",padx=MED_SPACE,pady=SMALL_SPACE)
  68.             for result in self.results:
  69.                 sri(scrollable_frame,result,row)
  70.                 row += 1
  71.             self.canvas.bind("<MouseWheel>",self._on_mousewheel)
  72.             scrollable_frame.update_idletasks()
  73.             scrollable_frame.configure(scrollregion=self.canvas.bbox("all"))
  74.             self.canvas.bind("<Configure>",self._update_scrollregion)
  75.         else:
  76.             tk.Label(self.frame,text=SEARCH_NO_RESULTS,font=FNT_NORMAL,bg=BG_COLOR).grid(row=0,column=0,sticky="nsew",padx=MED_SPACE,pady=SMALL_SPACE)
  77.     def _update_scrollregion(self,event):
  78.         self.canvas.configure(scrollregion=self.canvas.bbox("all"))
  79. app = exp_window()
  80. app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement